ruby - 多行 RegEx : match last occurrence only

标签 ruby regex

我有一个包含这样的 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 中)提取发生错误的行(1File "", 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/

相关文章:

ruby - 关于 Ruby 面向对象设计的问题

ruby - Ruby 1.9 中的线程阻塞主线程

java - 需要找到航类号的正则表达式

java - 使用 RegEx 从 java 字符串中删除除 - 和 _ 之外的所有标点符号

c# - 如何使用正则表达式删除 aspx 页面源代码中的 CSS 类?

javascript - 针对空格的正则表达式

ruby - rvm 组无法写入目录

ruby-on-rails - 如何转换字符串以便在 URL 中正确传递它?

ruby-on-rails - 如何让 will_paginate 正确显示条目数?

regex - 正则表达式用于替换字符实例后的所有内容