2013-06-13 9 views
10

Ben 'Not Ok' kelimelerini içeren bir test raporunda bütün satırları eşleştirmek istiyorum. Metnin Örnek hattı: Python regex belirli bir kelime ile eşleşecek

'Test result 1: Not Ok -31.08' 

bu çalıştı: http://rubular.com/ göre çalışır, ancak ben çıkışta hiçbir şey almalısınız

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

. Herhangi bir fikir, neyin yanlış olabilir? "." Gibi çeşitli diğer parametreleri test ettik. ve mükemmel çalıştığı "^ Test".

+0

Neden belirli bir dize ise regex? Neden "Tamam" değilse satır: '? –

+0

BTW, 're.match()' sadece dize başında eşleşir. –

+0

Sadece dize başlangıcını yapamadı .. emin maçı $ satırın sonunu eşleşmemelidir edildi? – casper

cevap

24

re.searchre.match ürününü kullanmalısınız.

Eğer dizede yerde bir maç bulmak istiyorsanız, kullanmak arama() yerine: docsre.match andan itibaren

.

sonra \b kelime sınırlarını kullanmak tam olarak bir kelimeyi 'Not Ok' arıyorsanız, aksi yalnızca alt dize 'Not Ok' arıyorsanız o zaman basit kullanın: 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

gerçekten, bu, tüm ekstra \ b şeyler olmadan bile çalışır. Teşekkürler! Ayrıca, bu davada yeniden çalışıldığını da gördüm. – casper

+3

@casper '\ b' olmadan, bunun gibi bir şeye de 'True' döndürecektir:' 'KNot Oke''. 'Re.findall' amacını kontrol için, tüm örtüşmeyen eşleşmelerin listesini döndürür' re.search' en iyi seçimdir. –

1

Sadece kullanabilirsiniz,

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

Örnek:

if 'Not Ok' in input_string: 
    print('Found string')