对 or 运算符使用 Negative lookbehind(前面没有多个单词)
Using Negative lookbehind with or operator (not preceded by multiple words)
我在 Python 中的正则表达式有问题。
et
可能仅在前面没有 m
或 mme
时才匹配
字符串:M et Mme Du Pont
或 Mme et M Du Pont
正则表达式:'\b(?<!m|mme)\bet\b'
错误:look-behind requires fixed-with patterd
我该如何解决这个问题?
'\b(?<!m)(?<!mme)\bet\b'
好像也不行
您可以像这样使用 2 个否定的回顾断言:
(?<!\bM )(?<!\bMme )\bet\b
M
和 Mme
之后的 space 字符很重要,因为在您的输入中 et
.
之前有一个 space
正则表达式详细信息:
(?<!\bM )
:如果我们在当前位置 之前有 "M "
字符串,则否定后视会使匹配失败
(?<!\bMme )
:如果我们在当前位置 之前有 "Mme "
字符串,则否定后视会使匹配失败
\bet\b
:匹配完整的单词et
除了错误之外,示例数据中 m
和 mme
之后的 space 在模式中缺失。
另一种选择是将 regex PyPi module 与单个回顾一起使用,断言直接在左侧的内容是 m
,可选地后跟 me
和 space.
\b(?<!m(?:me)? )et\b
Regex demo | Python using regex module demo
例如
import regex
pattern = r"\b(?<!m(?:me)? )et\b"
s = ("M et Mme Du Pont or Mme et M Du Pont\n"
"et\n"
"met")
print(regex.findall(pattern, s, regex.IGNORECASE))
输出
['et']
我在 Python 中的正则表达式有问题。
et
可能仅在前面没有 m
或 mme
字符串:M et Mme Du Pont
或 Mme et M Du Pont
正则表达式:'\b(?<!m|mme)\bet\b'
错误:look-behind requires fixed-with patterd
我该如何解决这个问题?
'\b(?<!m)(?<!mme)\bet\b'
好像也不行
您可以像这样使用 2 个否定的回顾断言:
(?<!\bM )(?<!\bMme )\bet\b
M
和 Mme
之后的 space 字符很重要,因为在您的输入中 et
.
正则表达式详细信息:
(?<!\bM )
:如果我们在当前位置 之前有 (?<!\bMme )
:如果我们在当前位置 之前有 \bet\b
:匹配完整的单词et
"M "
字符串,则否定后视会使匹配失败
"Mme "
字符串,则否定后视会使匹配失败
除了错误之外,示例数据中 m
和 mme
之后的 space 在模式中缺失。
另一种选择是将 regex PyPi module 与单个回顾一起使用,断言直接在左侧的内容是 m
,可选地后跟 me
和 space.
\b(?<!m(?:me)? )et\b
Regex demo | Python using regex module demo
例如
import regex
pattern = r"\b(?<!m(?:me)? )et\b"
s = ("M et Mme Du Pont or Mme et M Du Pont\n"
"et\n"
"met")
print(regex.findall(pattern, s, regex.IGNORECASE))
输出
['et']