2

我想从包含例如句子的日志文件中过滤掉消息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
# ???

我尝试过使用(?...)[^...]语法(请参见此处),但我做错了。

有任何想法吗?

4

2 回答 2

4

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

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

一般来说,与正则表达式的负匹配变得相当复杂。通常使用正匹配来找到你不想要的东西,然后用编程逻辑排除那些东西,会更容易、更有效。

于 2013-06-06T11:14:52.690 回答
4

使用这样的否定前瞻断言

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

并且还启用m修饰符,以便匹配一行的开始^$结束。

于 2013-06-06T11:13:48.990 回答