2017-07-03 19 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

[(M:*?。)/ - ファイル、行([0-9] +)/、1(M?) "*。"] 'sのを試してみてください'。 –

+0

@WiktorStribiżewnice one、あなたは '(?m)'と '(?-m)'の簡単な説明と答えとして投稿するべきです。 – Stefan

+0

タイトルに_solved_を追加したり、問題の解決方法を追加するための編集を追加したりしないでください。あなたがあなたの答えを受け入れたら、他の人はこれが解決されたことを知っているでしょう。 – Bugs

答えて

3

あなたは

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

詳細

  • (?m:.*)を使用することができます可能な限り多くの文字をに、最後の文字をにします。
  • (?-m:File ".*", line ([0-9]+)) - 複数行フラグがオフになり、ドットが今どの文字が、ラインブレーク文字に一致する別の修飾グループ:
    • File - それ
    • ".*"後にスペースを持つリテラルストリング - 二重引用符、任意のゼロか改行以外の文字mmoreし、別の二重引用符
    • , line - コンマ、1桁以上の数字をキャプチャスペース、「ライン」サブ
    • ([0-9]+) - グループ1。
+1

あなたは[モバイルで]書きました(https://stackoverflow.com/questions/44882462/multiline-regex-match-last-occurrence-only#comment76744490_44882462)?帽子はあなたに:-) – Stefan