对 or 运算符使用 Negative lookbehind(前面没有多个单词)

Using Negative lookbehind with or operator (not preceded by multiple words)

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

et 可能仅在前面没有 mmme

时才匹配

字符串:M et Mme Du PontMme 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

RegEx Demo

MMme 之后的 space 字符很重要,因为在您的输入中 et.

之前有一个 space

正则表达式详细信息:

  • (?<!\bM ):如果我们在当前位置
  • 之前有 "M " 字符串,则否定后视会使匹配失败
  • (?<!\bMme ):如果我们在当前位置
  • 之前有 "Mme " 字符串,则否定后视会使匹配失败
  • \bet\b:匹配完整的单词et

除了错误之外,示例数据中 mmme 之后的 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']