2013-06-13 22 views
10

テストレポートのすべての行に「Not Ok」という単語が含まれているようにしたい。テキストの 例ライン:http://rubular.com/に従って動作するはず特定の単語に一致するPythonの正規表現

filter1 = re.compile("Not Ok") 
for line in myfile:          
    if filter1.match(line): 
     print line 

、私は出力で何を取得:

'Test result 1: Not Ok -31.08' 

は、私はこれを試してみました。どのようなアイデア、何が間違っているかもしれない? "。"のような他のさまざまなパラメータをテストしました。と "^ Test"は完璧に動作します。

+0

なぜそれが特定の文字列かどうregexで?どうして '' Not Ok ''の行に '? –

+0

ところで、 're.match()'は文字列の先頭にのみ一致します。 –

+0

私は一致が文字列の先頭だけを行うことはできないと確信していました。 – casper

答えて

24

ここではre.matchではなくre.searchを使用してください。

あなたは、文字列のどこかにマッチを位置付けたい場合は、使用する検索()の代わりに:docsre.match上から

あなたが正確な単語'Not Ok'を探しているなら、\b単語の境界を使用し、それ以外の あなただけの簡単な使用、その後サブ'Not Ok'を探している場合:if 'Not Ok' in string

>>> strs = 'Test result 1: Not Ok -31.08' 
>>> re.search(r'\bNot Ok\b',strs).group(0) 
'Not Ok' 
>>> match = re.search(r'\bNot Ok\b',strs) 
>>> if match: 
...  print "Found" 
... else: 
...  print "Not Found" 
...  
Found 
+0

確かに、これは、すべての余分なものがなくても動作します。ありがとう!私はまた、re.findallがこの場合に働いていることも発見しました。 – casper

+3

@casperに '\ b'を指定しないと、このようなものに対しても' True'が返されます。 '' KNot Oke''。 're.findall'は重複しないすべてのマッチのリストを返します。目的を確認するために' re.search'が最適です。 –

1

あなたは、単に使用することができ、

if <keyword> in str: 
    print('Found keyword') 

例:

if 'Not Ok' in input_string: 
    print('Found string') 
関連する問題