2017-09-08 4 views
0

Pythonの 'in'関数を使用して、小さな文字列が別の大きな文字列の中にあるかどうかを確認します。問題は次のとおりです。"in" Python関数の正規表現の使い方

word1 = 'log' 
word2 = 'log_enable' 
string = ['parent_log', 'parent_log_enable'] 

for e in string: 
    if word1 in e: 
     print 'here we have the word' 

したがって、明らかに「ここには単語があります」というメッセージが2回印刷されます。正規表現が 'in'関数で使用できるかどうかを知りたいのですが、この場合正しい出力を得るためにはどちらを使うべきですか?

ありがとうございます。

マイク。

+4

'に構築します。単に 're'モジュールを直接使用してください。 –

+0

2つの可能性のみをテストする場合は、長い方のテストを開始できます。 –

+1

そして、なぜそれが「明らかに」2回印刷されるのでしょうか?コードは2つの文字列をテストし、両方の文字列が一致します。期待される結果はどのようなものでしょうか?ここでは 'word2'をテストしません。 –

答えて

2

inの正規表現は使用できません。

ここ
import re 

pattern = re.compile(r'log(?:_enable)?') 

for e in string: 
    if pattern.search(e): 
     print 'here we have the word' 

パターンのチェックを必要に応じて_enable続いlogのために:ちょうどinを交換に直接モジュールを使用しています。

+0

ありがとう!両方の答えで解決された問題:) –

0

inを単独で使用して目的を達成することはできません。

inをより簡潔に使用したい場合は、リストの補完が必要な場合があります。

私は正規表現をサポートしていませんin`マルタインの答え

import re 
p = re.compile(r'log(?:_enable)?') 
# Check if any match 
any(p.search(s) for s in ['parent_log', 'parent_log_enable']) 
# Result: True 

# Get all matches 
[s for s in ['parent_log', 'parent_log_enable'] if p.search(s)] 
# Result: ['parent_log', 'parent_log_enable'] 
+0

ありがとう、これは興味深い解決策ですが、Martijnのコードはmiスクリプトの方が優れています。もう一度ありがとう –

+1

ジェネレータ式が行うときにリスト内包表記を使用しないでください。最初にすべての入力に対して 'p.search()'を実行し、* any *を実行して結果をテストします。それは 'any()'のポイントを打ち負かします。 –