我有一个包含这样的 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]+)/
工作得很好,但匹配所有出现的地方。我只想要最后一个。迭代目标环境中的匹配项不是有效的解决方案,因为我无法更改那里的业务逻辑。
最佳答案
你可以使用
/(?m:.*)(?-m:File ".*", line ([0-9]+))/
详情
(?m:.*)
- 一个修饰符组,其中多行标志打开并且点匹配任何字符,包括尽可能多地匹配任何零个或多个字符的换行符后续子模式的最后出现(?-m:File ".*", line ([0-9]+))
- 另一个修饰符组,其中多行标志已关闭并且点现在匹配除行以外的任何字符打破字符:File
- 后面有空格的文字子串".*"
- 双引号,换行符以外的任何零个或更多字符,然后是另一个双引号, line
- 逗号、空格、“line”子串([0-9]+)
- 第 1 组捕获一位或多位数字。
关于ruby - 多行 RegEx : match last occurrence only,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44882462/