0

我想匹配一个包含“subscribe”但没有“did not”或“unsub.*”的字符串。

例如,

“请订阅我”将匹配

但是“我没有订阅这封电子邮件”或“请取消订阅我”将无法匹配。

我所拥有的是

".*subscribe(?!.*did\\s+not)(?!.*unsub.*)"

这显然不起作用。

再说一次,我想要的表达式是 (A and !B and !C)

任何帮助,将不胜感激。

谢谢,

埃里克

4

3 回答 3

1

您的前瞻应该在正则表达式的开头:

re.match(r"(?!.*did\s+not)(?!.*unsub).*subscribe", text)
于 2012-06-27T20:07:03.670 回答
0

正则表达式:

^(?!.*unsub)(?!.*did not).*subscribe

Python:

re.match(r"^(?!.*unsub)(?!.*did not).*subscribe", str)
于 2012-06-27T20:08:50.877 回答
0

您可以使用正面和负面的前瞻性来做到这一点,但更好的方法是为搜索词设置一个正则表达式,为停用词设置另一个。

if re.search(r"\bsubscribe", text) and not re.search(r"did\s+not|\bunsub", text):
    unsubscribe(sender)

仅当您需要在特定位置包含/排除文本时,才值得使用前瞻。

另请注意,\b(单词边界)将阻止“订阅”在“取消订阅”一词中匹配。

于 2012-06-27T23:18:20.673 回答