行に正規表現パターンのセットに一致する単語が含まれているかどうかを確認する方法はありますか? もし私が[regex1, regex2, regex3]
を持っていて、それらのどれかに一致する行が見たいのですが、どうすればいいですか? 今はre.findall(regex1, line)
を使用していますが、一度に1正規表現にしか一致しません。Pythonを使用して複数の正規表現と一致する行
答えて
組み込み関数any
(またはすべての正規表現が一致する必要がある場合はall
)とすべての正規表現オブジェクトを利用してジェネレータ表現を使用することができます。
any (regex.match(line) for regex in [regex1, regex2, regex3])
(又はany(re.match(regex_str, line) for regex in [regex_str1, regex_str2, regex_str2])
正規表現はもちろんのプリコンパイルされた正規表現オブジェクトでない場合)
それは単一の式であなたの正規表現を組み合わせると比較ineficientあろうが - このコードは時間である場合特別な|
regex演算子を使って元の式を分離して、必要なものすべてを網羅する単一の正規表現を作成してみてください。 すべてregexsを結合する簡単な方法は、「参加」の文字列を使用することですオペレータ:
re.match("|".join([regex_str1, regex_str2, regex_str2]) , line)
オリジナルのものはすでにを利用して行う場合は、このフォームに正規表現を組み合わせること、間違った表現になりますが、 |
オペレータ。
この新しい正規表現を試してください:(regex1)|(regex2)|(regex3)。これは、3つの正規表現のいずれかと一致します。
'(?:...)'は、疑わしいキャプチャグループの作成を避けるために、おそらく '(...)'よりも優れたアイデアです。 –
@Karl ... '.group(n)'の真実性をチェックして、あなたが捕獲したグループを特定したくない場合を除きます。 –
正規表現の項目をループして検索します。
regexList = [regex1, regex2, regex3]
line = 'line of data'
gotMatch = False
for regex in regexList:
s = re.search(regex,line)
if s:
gotMatch = True
break
if gotMatch:
doSomething()
- 1. 複数の正規表現の一致
- 2. 正規表現 - 複数の一致
- 3. 一致する複数のPythonの正規表現は、tarファイル
- 4. 正規表現と同じ行に複数の一致
- 5. 複数回一致するPython正規表現
- 6. Cスタイルの複数行コメントに一致する正規表現
- 7. 複数の行に一致する正規表現
- 8. Pythonで複数行の正規表現パターンを一致させる
- 9. PL \ SQL内の複数行モード正規表現を使用した複数行にわたる一致
- 10. 複数の複数行のグループに一致するPerlの正規表現
- 11. Pythonの正規表現をループすると一致します
- 12. 正規表現と一致する正規表現2.3
- 13. 正規表現と一致する正規表現
- 14. 複数行のPythonの正規表現
- 15. 速く、複数の正規表現の文字列がPythonと一致する
- 16. PCRE正規表現の重複一致
- 17. 1つの改行に一致する正規表現。正規表現をダブル改行に一致させる
- 18. 正規表現と一致し、特定のhtmlタグで複数行を破棄
- 19. 正規表現と同じ行に一致する複数の文字列
- 20. コマンドラインで複数の行と正規表現を一致させる
- 21. jQueryを使用した正規表現との一致
- 22. オプションパラメータと一致する正規表現
- 23. 正規表現と一致するコードコメント
- 24. 正規表現のディレクトリパスに一致する正規表現
- 25. Python正規表現改行が一致しました
- 26. 正規表現のURLを一致させる正規表現
- 27. 複数のグループに一致する正規表現
- 28. 文中の複数条件に一致する正規表現
- 29. 複数の正規表現グループが一致する
- 30. 複数の文字列に一致する正規表現
括弧で各式をラップすると、結合方法が失敗する可能性は低くなります。 ''(foo)|(bar)|(baz) ''を返します。 – FakeRainBrigand
さらに、 '(?:...)'をラップし、その論理構造を強調する方法で文字列をまとめてください。 ( 'foo'、 'bar'、 'baz')) 'の' | '.join('(?:{0})。 –
私のために働きました....ありがとう – Prateek