繁体   English   中英

多行正则表达式:仅匹配最后一次出现

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM