例如有这样一段文本(无标点符号):
请问您的姓名是什么姓名张三对吗
现在需要提取姓名,即"张三"。需要提取的姓名,位于"姓名"和"对"这两个固定的字符串之间,故使用以下正则表达式规则:
(?<=姓名)(.*?)(?=对)
提取结果只有一条,如下:
是什么姓名张三
请问怎样的正则表达式可以完整地返回以下两个结果:
是什么姓名张三
张三
完整地返回以下两个结果:(?<=姓名)(.*?((?<=姓名).*?)?)(?=对)/)
第一个子匹配结果:是什么姓名张三
第二个子匹配结果:张三
如果要直接获取“张三”(?<=姓名)((?:(?!姓名).)*?)(?=对)
不用这么复杂把!你这里主要是想搞清楚一个贪婪和非贪婪匹配的区别。
我理解贪婪程序是从姓名开始找,找到第一个对结束。然后再往后找第二个对。所以我认为 (?<=姓名)(.*?)(?=对) 非贪婪匹配就是是什么姓名张三
第一个匹配我就不说了。我觉得第二个匹配这么写你可能好理解一些。
re.search(r'(?<=姓名).*(?<=姓名)(.*)(?=对)',youstr)
re.search(r'(?<=姓名)(.{2,4})(?=对)'youstr)