[英]Multiline RegEx: match last occurrence only
我有一个包含这样的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
现在我想提取其中发生错误的行( 1
摘自File "", line 1
)使用正则表达式多(在Ruby中)。
/File ".*", line ([0-9]+)/
可以很好地工作,但是匹配所有匹配项。 我只想要最后一个。 在目标环境中迭代匹配不是一个有效的解决方案,因为我无法在那里更改业务逻辑。
您可以使用
/(?m:.*)(?-m:File ".*", line ([0-9]+))/
细节
(?m:.*)
-一个修饰符组,其中多行标志处于打开状态,并且点与任何字符匹配,包括换行符,该字符与任何零个或多个字符匹配,并尽可能多地匹配到最后出现的后续子模式 (?-m:File ".*", line ([0-9]+))
-另一个修饰符组,其中多行标志已关闭,并且点现在与除换行符以外的任何字符都匹配:
File
文字子字符串,其后有空格 ".*"
-双引号,除换行符外的任何零或mmore字符,然后再加上双引号 , line
-逗号,空格,“行”子字符串 ([0-9]+)
-组1捕获一个或多个数字。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.