首页 > 解决方案 > 使用带有或运算符的否定后向查找(前面没有多个单词)

问题描述

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

et 仅当它前面没有mor时才可能匹配mme

字符串: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'似乎也不起作用

标签: python-3.xregexnegative-lookbehind

解决方案


除了错误之外,示例数据中还有一个空格,m并且mme在模式中缺少该空格。

另一种选择是使用正则表达式 PyPi 模块和一个后向断言,断言左边的内容是m,可选地后跟me一个空格。

\b(?<!m(?:me)? )et\b

正则表达式演示| Python 使用正则表达式模块演示

例如

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']

推荐阅读