Xeon AMG
2019-02-28 16:13
采纳率: 100%
浏览 8.7k

如何用正则表达式提取所有符合「介于两个特定字符串a和b之间」这一条件的内容?

例如有这样一段文本(无标点符号):

请问您的姓名是什么姓名张三对吗

现在需要提取姓名,即"张三"。需要提取的姓名,位于"姓名"和"对"这两个固定的字符串之间,故使用以下正则表达式规则:

(?<=姓名)(.*?)(?=对)

提取结果只有一条,如下:

是什么姓名张三

请问怎样的正则表达式可以完整地返回以下两个结果:

是什么姓名张三

张三

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

2条回答 默认 最新

  • 天际的海浪 2019-02-28 17:00
    已采纳

    完整地返回以下两个结果:
    (?<=姓名)(.*?((?<=姓名).*?)?)(?=对)/)
    第一个子匹配结果:是什么姓名张三
    第二个子匹配结果:张三

    如果要直接获取“张三”
    (?<=姓名)((?:(?!姓名).)*?)(?=对)

    点赞 打赏 评论
  • rwangnqian 2019-07-05 10:16

    不用这么复杂把!你这里主要是想搞清楚一个贪婪和非贪婪匹配的区别。
    我理解贪婪程序是从姓名开始找,找到第一个对结束。然后再往后找第二个对。所以我认为 (?<=姓名)(.*?)(?=对) 非贪婪匹配就是是什么姓名张三
    第一个匹配我就不说了。我觉得第二个匹配这么写你可能好理解一些。
    re.search(r'(?<=姓名).*(?<=姓名)(.*)(?=对)',youstr)
    re.search(r'(?<=姓名)(.{2,4})(?=对)'youstr)

    点赞 打赏 评论

相关推荐 更多相似问题