2013-06-13 18 views
10

Voglio abbinare tutte le linee in un rapporto di prova, che contengono le parole 'Non Ok'. linea Esempio di testo:Python regex per abbinare una parola specifica

'Test result 1: Not Ok -31.08' 

Ho provato questo:

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

che dovrebbe funzionare secondo http://rubular.com/, ma ottengo nulla in uscita. Qualche idea, cosa potrebbe essere sbagliato? Testati vari altri parametri, come "." e "^ Test", che funzionano perfettamente.

+0

Perché regex se si tratta di una stringa specifica? Perché non 'se" Non Ok "in linea:'? –

+0

BTW, 're.match()' corrisponde solo all'inizio della stringa. –

+0

Ero sicuro che la partita non poteva solo fare l'inizio della stringa .. non dovrebbe corrispondere alla fine della linea $? – casper

risposta

24

È necessario utilizzare re.search qui non re.match.

Dal docs su re.match: ricerca

Se si desidera individuare una corrispondenza ovunque nella string, utilizzare(), invece.

Se stai cercando la parola esatta 'Not Ok' quindi utilizzare \b confini di parola, altrimenti se siete solo alla ricerca di una stringa 'Not Ok' quindi utilizzare semplice: 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

infatti, funziona, anche senza tutte le cose extra \ b. Grazie! Ho anche scoperto che re.findall ha funzionato in questo caso. – casper

+3

@casper senza '\ b' restituirà' True' per qualcosa di simile a questo: ''KNot Oke''. 're.findall' restituisce una lista di tutte le corrispondenze non sovrapposte, per verificare che' re.search' è la scelta migliore. –

1

Si potrebbe semplicemente usare,

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

Esempio:

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