2017-05-08 5 views
-1

文字列を検出しようとしていますが、時々1行で表示されることがあります。複数行の文字列を検出するPythonの正規表現

ケース1:

==================== 1 error in 500.14 seconds ============= 

ケース2:

================= 3 tests deselected by "-m 'not regression'" ================== 
21 failed, 553 passed, 35 skipped, 3 deselected, 4 error, 51 rerun in 6532.96 seconds 

私は、次のことを試してみましたが、それは正規表現の下に使用し

==+.*(?i)(?m)(error|failed).*(==+|seconds) 
+0

2番目の文字列で一致する内容は何ですか? – VMRuiz

+0

テストに失敗しました。 ** xx failed ** or ** xx error ** –

+0

'\ d + failed | \ d + error'で十分でない理由はありますか? – VMRuiz

答えて

1

を働いていない:

==+[\s\S]*?(\d+)\s(error|failed).*(==+|seconds) 
  • [\s\S]代わりに.可能行区切り文字も
  • (\d+)最初に一致した基である​​のでmatches[0]は、常にそのような1又は21
  • (error|failed)として数が第2の整合グループようmatches[1]のいずれか」を含むことになるで含まれていますエラー」または 'Pで失敗した'

Regex101 Demo

テストython:

import re 

pattern = "==+[\s\S]*?(\d+)\s(error|failed).*(==+|seconds)" 
case1 = "==================== 1 error in 500.14 seconds =============" 
p = re.compile(pattern) 
matches = p.match(case1).groups() 
matches[0] + " " + matches[1] # Output: '1 error' 

case2 = """================= 3 tests deselected by -m 'not regression' ================== 
21 failed, 553 passed, 35 skipped, 3 deselected, 4 error, 51 rerun in 6532.96 seconds""" 
matches = p.match(case2).groups() 
matches[0] + " " + matches[1] # Output: '21 failed' 

希望します。

関連する問題