我有一个日志文件,其中包含程序的运行时信息。如果失败则会生成典型的python堆栈跟踪。
我想提取整个堆栈跟踪,由跟踪回拨(最近一次呼叫最后一次):'进入一个正则表达式组,然后运行另一个单独的正则表达式以获取最后一行,通常类似于KeyError:Something blah blah。
我有两个问题,我无法找到答案,是否可以使用正则表达式查找Traceback行,如果它存在,那么抓住从该行到文件末尾的所有内容?
如果是这样,我可以在捕获的正则表达式组上运行不同的正则表达式吗?
答案 0 :(得分:0)
这应该是最明显的。在这种情况下,请尝试始终给出(代码)有关环境的示例,例如您的具体日志结构。 查看regex文档。
import re
test = """
some stuff
Traceback (most recent call last):
File "x.py", line x, in <module>
raise KeyError("foo")
KeyError: foo
some stuff
Traceback (most recent call last):
File "y.py", line y, in <module>
raise KeyError("bar")
KeyError: bar
some other stuff
"""
match = re.findall(ur"^Traceback \(most recent call last\):\n(.*?^KeyError: (.+?)$)$", test, re.DOTALL|re.MULTILINE)
for traceback, error in match:
print "\n".join(a.strip() for a in traceback.split("\n"))
print error.strip()
提示:。*?是一种非贪婪的匹配,这意味着它试图尽可能少地匹配。否则它匹配两个回溯之间的东西。
结果:
File "x.py", line x, in <module>
raise KeyError("foo")
KeyError: foo
foo
File "y.py", line y, in <module>
raise KeyError("bar")
KeyError: bar
bar