【问题标题】:regex - match last occurrence group正则表达式 - 匹配最后出现的组
【发布时间】:2020-06-18 04:48:20
【问题描述】:

示例字符串:'100 foo 100 bar asdfasdf asdfasdf frqf 200 foo 200 bar asdfsd FOOBAR'

我想匹配最近出现的数字后跟 foo 和数字后跟 bar,它在 FOOBAR 之前

预期:[200, 200]

电流输出:[100, 100]

这就是我所拥有的:

r'(\d+.?\d+)\s*foo.*?(\d+.?\d+).*bar(?:.|\n)*(?:FOOBAR)\s?(\d+.?\d+).*?'

【问题讨论】:

  • 您使用什么语言?是否支持lookahead和lookbehind?
  • 字符串中应该出现 FOOBAR 吗?并且只出现一次 FOOBAR?

标签: regex


【解决方案1】:

如果您使用的语言支持负前瞻,您应该尝试-

(\d+) foo (\d+) bar(?:(?!(\d+) foo (\d+) bar).)*?FOOBAR

查看演示here

解释:-

  • 首先我们使用(\d+) foo (\d+) bar检查digits foo digits bar

  • 现在我们使用负前瞻确保不会再次出现digits foo digits bar anything - (?!(\d+) foo (\d+) bar).

    我们现在将它包装在一个非捕获组中并对其进行惰性量词。

  • 最后,检查最后的FOOBAR

基本上这确保了此处捕获的数字组-

(\d+) foo (\d+) bar

在到达FOOBAR 之前没有任何其他digits foo digits bar 关注

【讨论】:

    猜你喜欢
    • 2021-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多