【发布时间】:2021-09-16 19:05:57
【问题描述】:
如果同一个句子中不存在另一个词(坏),我正在尝试匹配一个词(好)。我想使用lookaround 来执行此操作,因为我只想将第一个单词(好)包含在捕获的结果中。
这是我的正则表达式:
(?<!\bbad\b[^.])\bgood\b(?![^.]+\bbad\b)
这在所有情况下都有效,除非我正在寻找的词(好)在另一个词(坏)之前。
所以在下面的例子中,结果如下:
- 测试 1:错误正则表达式的一个很好的例子。 (无匹配 - PASS)
- 测试 2:一个好的正则表达式的坏例子。 (找到匹配 - 失败)
- 测试 3:一个不好的例子。一个好的正则表达式。 (找到匹配项 - PASS)
- 测试 4:一个很好的例子。一个糟糕的正则表达式。 (找到匹配项 - PASS)
有人可以指出我在这里缺少什么吗? Here's my test on regex101.com.
【问题讨论】:
-
所以
bad不能在同一句话中出现在good之后? -
@anubhava。是的,在同一个句子中,“坏”不能出现在“好”之前或之后。如果“好”之后出现“坏”,我的正则表达式有效。但是,如果在同一个句子中“好”之前出现“坏”,则正则表达式会失败。
-
顺便提一下,matching what you don't need but capture what you want 也可以:
[^.]*\bbad\b[^.]*|(\bgood\b)(如果你可以使用这个,取决于你的任务。它需要以编程方式检查,如果设置了组 1)跨度>
标签: regex regex-lookarounds sentence