我有一个包含这样的Python堆栈跟踪的字符串(前后有一些不相关的文本):
Traceback (most recent call last):
File "/workspace/r111.py", line 232, in test_assess
exec(code)
File "a111.py", line 17, in
def reset(self):
File "/workspace/r111.py", line 123, in failed
raise AssertionError(msg)
AssertionError: Dein Programm funktioniert nicht. Python sagt:
Traceback (most recent call last):
File "a111.py", line 6, in
File "/workspace/r111.py", line 111, in runcaptured
exec(c, variables)
File "", line 1, in
ZeroDivisionError: division by zero
现在我想使用多行RegEx(在Ruby中)提取发生错误的行(1
从File "", line 1
中提取)。
/File ".*", line ([0-9]+)/
效果很好,但匹配所有出现次数。我只想要最后一个。迭代目标环境中的匹配不是有效的解决方案,因为我无法改变那里的业务逻辑。
答案 0 :(得分:3)
您可以使用
/(?m:.*)(?-m:File ".*", line ([0-9]+))/
<强>详情
(?m:.*)
- 一个修改器组,其中多线标志处于打开状态,并且该点匹配任何包含换行符的换行符,该换行符尽可能多地匹配任何零个或多个字符,直到 last 发生后续子模式(?-m:File ".*", line ([0-9]+))
- 另一个修改器组,其中多行标志关闭,点现在匹配任何字符但行换行符:
File
- 一个带有空格的文字子字符串".*"
- 一个双引号,除了换行符之外的任何零或毫米字符,然后是另一个双引号, line
- 逗号,空格,“line”substring ([0-9]+)
- 第1组捕获一个或多个数字。