2017-07-03 57 views
2

我有一個包含這樣一個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

回答

3

您可以使用

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

詳細

  • (?m:.*) - 調節基團,其中多標誌上點任何字符,包括換行字符,任何零個或多個匹配相匹配字符儘可能多最後發生後續子模式
  • (?-m:File ".*", line ([0-9]+)) - 另一種調節基團,其中多標誌關閉和點現在可以匹配任何字符,但換行字符:
    • File - 與空間的文字串後
    • ".*" - 一個雙引號,任何零或mmore字符比換行符其他然後另一個雙引號
    • , line - 逗號,空格,「線」子
    • ([0-9]+) -Group 1捕獲一個或多個數字。
+1

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

相關問題