我在Python中的正则表达式有问题。
et
只有在前面没有m
或mme
的情况下才能匹配
字符串:M et Mme Du Pont
或Mme et M Du Pont
正则表达式:'b(?<!m|mme)betb'
错误:look-behind requires fixed-with patterd
我该怎么解决这个问题?
'b(?<!m)(?<!mme)betb'
似乎也不起作用
除了错误之外,示例数据中m
和mme
之后还有一个空格,该空格在模式中丢失。
另一种选择是使用带有单个lookbacking的regex-PyPi模块,断言直接在左边的是m
,可以选择后面跟着me
,后面跟着一个空格。
b(?<!m(?:me)? )etb
Regex演示| Python使用Regex模块演示
例如
import regex
pattern = r"b(?<!m(?:me)? )etb"
s = ("M et Mme Du Pont or Mme et M Du Pontn"
"etn"
"met")
print(regex.findall(pattern, s, regex.IGNORECASE))
输出
['et']
您可以使用两个否定的后备断言,如下所示:
(?<!bM )(?<!bMme )betb
RegEx演示
M
和Mme
之后的空格字符很重要,因为在您的输入中,et
之前有一个空格。
RegEx详细信息:
(?<!bM )
:如果在当前位置之前有"M "
字符串,则反向查找将使匹配失败(?<!bMme )
:如果我们在当前位置之前有"Mme "
字符串,则反向查找将使匹配失败betb
:匹配完整词et