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

问题描述:

我有一个包含这样一个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 

现在我想提取其中发生错误的行(1File "", line 1中提取)使用多行RegEx(在Ruby中)。

/File ".*", line ([0-9]+)/很好地工作,但匹配所有的事件。我只想要最后一个。迭代目标环境中的匹配不是一个有效的解决方案,因为我无法在那里更改业务逻辑。

+2

尝试'S [/(米:?。*)( - M +) “*” 的文件,线([0-9] +)/ 1]'。 –

+0

@WiktorStribiżew不错的一个,你应该把它作为回答,并附上'(?m)'和'(?-m)'的简单解释。 – Stefan

+0

请不要将_solved_附加到标题或添加编辑以包含解决方案。一旦你接受了你的回答,其他人就会知道这个问题已经解决 – Bugs

您可以使用

/(?m:.*)(?-m:File ".*", line ([0-9]+))/ 

详细

  • (?m:.*) - 调节基团,其中多标志上点任何字符,包括换行字符,任何零个或多个匹配相匹配字符尽可能多最后发生后续子模式
  • (?-m:File ".*", line ([0-9]+)) - 另一种调节基团,其中多标志关闭和点现在可以匹配任何字符,但换行字符:
    • File - 与空间的文字串后
    • ".*" - 一个双引号,任何零或mmore字符比换行符其他然后另一个双引号
    • , line - 逗号,空格,“线”子
    • ([0-9]+) -Group 1捕获一个或多个数字。
+1

你写了[在手机上](https://*.com/questions/44882462/multiline-regex-match-last-occurrence-only#comment76744490_44882462)?向你致敬 :-) – Stefan