正则表达式 - 将同一句子中的单词与否定环视匹配
RegEx - Match Words in Same Sentence with Negative Lookaround
如果同一个句子中不存在另一个词(坏),我正在尝试匹配一个词(好)。我想使用 lookaround 来执行此操作,因为我只想在捕获的结果中包含第一个词(好)。
这是我的正则表达式:
(?<!\bbad\b[^.])\bgood\b(?![^.]+\bbad\b)
这在所有情况下都有效,除非我要找的词(好)在另一个词(坏)之前。
所以在下面的例子中,结果如下:
- 测试 1:错误正则表达式的一个很好的例子。 (没有匹配 - 通过)
- 测试 2:好的正则表达式的一个坏例子。 (找到匹配 - 失败)
- 测试 3:一个不好的例子。一个好的正则表达式。 (找到匹配 - 通过)
- 测试 4:一个很好的例子。一个糟糕的正则表达式。 (找到匹配 - 通过)
有人可以指出我在这里缺少的东西吗? Here's my test on regex101.com.
您可以使用这个正则表达式:
(?:^|\.)(?:(?!\b(?:bad|good)\b)[^.])*(\bgood\b)(?![^.]+\bbad\b)
正则表达式详细信息:
(?:^|\.)
:匹配起始位置或一个点
(?:(?!\b(?:bad|good)\b)[^.])*
:如果前面没有单词good
或bad
,则匹配一个非点字符。重复此匹配 0 次或更多次
(\bgood\b)
:匹配全词good
(?![^.]+\bbad\b)
:否定前瞻断言我们没有一个或多个非点字符后跟单词,bad
在当前位置 之前
如果支持 lookbehind 中的量词,您可以选择重复字符 class,排除匹配换行符。
(?<!\bbad\b[^.\n]*)\bgood\b(?![^.\n]+\bbad\b)
模式匹配:
(?<!\bbad\b[^.\n]*)
否定后视,断言左边不是单词 bad
后跟可选字符,不包括 .
或换行符
\bgood\b
匹配单词 good
(?![^.\n]+\bbad\b)
否定前瞻,断言右边不是可选字符,不包括 .
或换行符和单词 bad
如果同一个句子中不存在另一个词(坏),我正在尝试匹配一个词(好)。我想使用 lookaround 来执行此操作,因为我只想在捕获的结果中包含第一个词(好)。
这是我的正则表达式:
(?<!\bbad\b[^.])\bgood\b(?![^.]+\bbad\b)
这在所有情况下都有效,除非我要找的词(好)在另一个词(坏)之前。
所以在下面的例子中,结果如下:
- 测试 1:错误正则表达式的一个很好的例子。 (没有匹配 - 通过)
- 测试 2:好的正则表达式的一个坏例子。 (找到匹配 - 失败)
- 测试 3:一个不好的例子。一个好的正则表达式。 (找到匹配 - 通过)
- 测试 4:一个很好的例子。一个糟糕的正则表达式。 (找到匹配 - 通过)
有人可以指出我在这里缺少的东西吗? Here's my test on regex101.com.
您可以使用这个正则表达式:
(?:^|\.)(?:(?!\b(?:bad|good)\b)[^.])*(\bgood\b)(?![^.]+\bbad\b)
正则表达式详细信息:
(?:^|\.)
:匹配起始位置或一个点(?:(?!\b(?:bad|good)\b)[^.])*
:如果前面没有单词good
或bad
,则匹配一个非点字符。重复此匹配 0 次或更多次(\bgood\b)
:匹配全词good
(?![^.]+\bbad\b)
:否定前瞻断言我们没有一个或多个非点字符后跟单词,bad
在当前位置 之前
如果支持 lookbehind 中的量词,您可以选择重复字符 class,排除匹配换行符。
(?<!\bbad\b[^.\n]*)\bgood\b(?![^.\n]+\bbad\b)
模式匹配:
(?<!\bbad\b[^.\n]*)
否定后视,断言左边不是单词bad
后跟可选字符,不包括.
或换行符\bgood\b
匹配单词good
(?![^.\n]+\bbad\b)
否定前瞻,断言右边不是可选字符,不包括.
或换行符和单词bad