问题描述
我的Python正则表达式有问题。
et
仅在不带有m
或mme
字符串:M et Mme Du Pont
或Mme et M Du Pont
regex:'\b(?<!m|mme)\bet\b'
错误:look-behind requires fixed-with patterd
我该如何解决?
'\b(?<!m)(?<!mme)\bet\b'
似乎也不起作用
解决方法
除了错误之外,示例数据中m
和mme
之后还有一个空格,该空格在模式中缺失。
另一种选择是使用regex PyPi module并进行单向查找,以断言直接在左边的是m
,可以选择后面跟着me
和空格。
\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']
,
您可以使用以下2个否定的向后断言:
(?<!\bM )(?<!\bMme )\bet\b
M
和Mme
之后的空格很重要,因为在输入中et
之前有一个空格。
RegEx详细信息:
-
(?<!\bM )
:如果我们在当前位置之前有"M "
字符串,则负向后搜索失败将导致匹配失败 -
(?<!\bMme )
:如果我们在当前位置之前有"Mme "
字符串,则负向后搜索失败将导致匹配失败 -
\bet\b
:匹配完整词et