Python正则表达式:如何匹配不包含* exact *句子的字符串?

时间:2013-06-06 11:10:03

标签: python regex

我想过滤掉包含例如日志文件的邮件。句子This is message 12345. Ignore.

如果我使用grep,我可以简单地传递句子并使用-v开关,例如:

grep -v "This is message 12345\. Ignore\." data.log

问题是,我必须在Python中执行此操作。类似的东西:

import re
with open("data.log") as f:
    data = f.read()
# This will select all lines that match the given sentence
re.findall(".*This is message 12345\. Ignore\..*$", data)

# HERE --> I would like to select lines that DO NOT match that sentence
# ???

我尝试使用(?...)[^...]语法(请参阅here),但我无法正确使用。

有什么想法吗?

2 个答案:

答案 0 :(得分:4)

像这样使用negative lookahead assertion

re.findall("(?!^.*This is message 12345\. Ignore\..*$).*", data)

并启用m修饰符,以便^$匹配行的开头和结尾。

答案 1 :(得分:4)

一个更简单的方法是将其转换为正匹配问题:

  • 逐行浏览文件
  • 在该行上执行正面正则表达式,如果匹配,则丢弃该行。

通常,与正则表达式的否定匹配变得相当复杂。使用正匹配找到你不想要的东西通常更简单,更有效,然后用编程逻辑排除那些东西。