使用带或运算符(前面没有多个单词)的否定查找



我在Python中的正则表达式有问题。

et只有在前面没有mmme的情况下才能匹配

字符串:M et Mme Du PontMme et M Du Pont

正则表达式:'b(?<!m|mme)betb'

错误:look-behind requires fixed-with patterd

我该怎么解决这个问题?

'b(?<!m)(?<!mme)betb'似乎也不起作用

除了错误之外,示例数据中mmme之后还有一个空格,该空格在模式中丢失。

另一种选择是使用带有单个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演示

MMme之后的空格字符很重要,因为在您的输入中,et之前有一个空格。

RegEx详细信息:

  • (?<!bM ):如果在当前位置之前有"M "字符串,则反向查找将使匹配失败
  • (?<!bMme ):如果我们在当前位置之前有"Mme "字符串,则反向查找将使匹配失败
  • betb:匹配完整词et

最新更新