【发布时间】:2012-09-29 16:34:42
【问题描述】:
我的代码正在解析日志文件中的一些行。
我用这个做了很多事情,但是特别需要能够找到不包含某个子字符串的行。在一定条件下
我对正则表达式有很好的理解。但我似乎无法弄清楚这一点。
问题:
我想捕获任何不包含单词error 或warn 的行。除非它是日志条目的第一部分并用方括号括起来。
到目前为止,我已经尝试过这样的事情:
(((?:abc|cba)\s+.*(?!\[?(?!error|warn)\]?).*)|((abc|cba)\s+\[(error|warn)\]\s+(.*)))
日志中的行可能类似于以下示例:
捕获组 2:
abc [error] message
cba [error] message
cba [warn] message
捕获组 1:
abc something random
cba i dont know
不要捕捉:
abc some [error] message
cba some [warn] message
简单英语的问题;我想得到任何以abc 或cba 开头的行。如果捕获组 1 中没有 [error] 或 [warn] ,则应该抓住该行。只有当[error] 或[warn] 是条目的第一部分(在abc 或cba 之后)时,捕获组2 才应获取它
【问题讨论】:
-
所以正则表达式应该只在 1 行中工作?就像您将行一一传递给正则表达式进行检查?
-
@nhahtdh 文件的每一行都被正则表达式解析。 1 比 1。是的。
标签: python regex python-2.6