多行正则表达式:匹配最后一次出现只有
问题描述:
我有一个包含这样一个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
中提取)使用多行RegEx(在Ruby中)。
/File ".*", line ([0-9]+)/
很好地工作,但匹配所有的事件。我只想要最后一个。迭代目标环境中的匹配不是一个有效的解决方案,因为我无法在那里更改业务逻辑。
答
您可以使用
/(?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
尝试'S [/(米:?。*)( - M +) “*” 的文件,线([0-9] +)/ 1]'。 –
@WiktorStribiżew不错的一个,你应该把它作为回答,并附上'(?m)'和'(?-m)'的简单解释。 – Stefan
请不要将_solved_附加到标题或添加编辑以包含解决方案。一旦你接受了你的回答,其他人就会知道这个问题已经解决 – Bugs