2016-06-22 3 views
1

リスト内の文字列のいずれかが正規表現と一致するかどうかを確認する必要があります。もしあれば、私は続けたい。Python:リスト内の文字列が正規表現と一致する場合

私は今、かなり非効率的であると認識
r = re.compile('.*search.*') 
if [line for line in output if r.match(line)]: 
    do_stuff() 

:私は常に過去にそれをやった方法は、のようなもので、リストの内包表記を使用しています。リストの最初の項目が一致すれば、残りの比較をすべてスキップして移動できます。私はこれを改善することができます:

r = re.compile('.*search.*') 
for line in output: 
    if r.match(line): 
    do_stuff() 
    break 

しかし、これを行うには、より神託の方法がある場合、私は思ったんだけど。

+0

組み込みの 'any()'を使わないのはなぜですか?例: 'any()'がリストを取得し、各要素を 'bool'に変換してから、boolを評価するため、' if any(出力行のre.match(行)) ' – Jkdc

+0

@Jkdcですから、 'any()'が便利になるようにするためには、すべての要素に対して正規表現マッチを行う必要があります。 – ewok

+0

@ewok:いいえ、 'any'は* iterable *を取っています。 jkdcのコードでは、リストではなく、遅延ジェネレータ式が使用されます。 – DSM

答えて

8

あなたは、組み込みany()使用することができます。

if any(re.match(line) for line in output): 
    do_stuff() 

any()に怠惰な発電機に渡すことが反復可能に任意の遠くチェックしなくても、最初のマッチで終了することができます。

+0

この方法で一致する文字列にアクセスする方法はありますか?私はログの目的のためにそれを印刷したいと思います – nat5142

関連する問題