Python正则表达式 - 匹配包含#expr1而不是#exp2而不是#exp3的字符串

时间:2012-06-27 20:03:24

标签: python regex

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

例如,

“请订阅我”将匹配

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

我拥有的是

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

显然不起作用。

所以,我想要的表达式是(A和!B和!C)

任何帮助都将不胜感激。

谢谢,

埃里克

3 个答案:

答案 0 :(得分:1)

你的前瞻应该是正则表达式的开头:

re.match(r"(?!.*did\s+not)(?!.*unsub).*subscribe", text)

答案 1 :(得分:0)

正则表达式:

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

的Python:

re.match(r"^(?!.*unsub)(?!.*did not).*subscribe", str)

答案 2 :(得分:0)

你可以用积极和消极的前瞻来做到这一点,但更好的方法是为搜索词设置一个正则表达式,为停用词设置另一个正则表达式。

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

如果您需要在特定位置包含/排除文本,则只需使用前瞻。

另请注意,\b(字边界)将保留“订阅”以匹配“取消订阅”字样内容。