web-dev-qa-db-fra.com

Python regex pour correspondre à un mot spécifique

Je veux faire correspondre toutes les lignes d'un rapport de test, qui contiennent les mots "Pas OK". Exemple de ligne de texte:

'Test result 1: Not Ok -31.08'

J'ai essayé ceci:

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

qui devrait fonctionner selon http://rubular.com/ , mais je ne reçois rien à la sortie. Une idée, qu'est-ce qui ne va pas? Testé divers autres paramètres, comme "." et "^ Test", qui fonctionnent parfaitement.

11
casper

Tu devrais utiliser re.search pas ici re.match.

Depuis docs le re.match:

Si vous souhaitez rechercher une correspondance n'importe où dans la chaîne, utilisez plutôt search ().

Si vous recherchez le mot exact 'Not Ok' puis utilisez \b Limites des mots, sinon si vous recherchez uniquement une sous-chaîne 'Not Ok' puis utilisez simple: 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
27
Ashwini Chaudhary

Vous pouvez simplement utiliser,

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

Exemple:

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

Absolument pas besoin d'utiliser RegEx dans ce cas! Utilisez simplement:

s = 'Test result 1: Not Ok -31.08'
if s.find('Not Ok') > 0 : 
    print("Found!")

ou comme déjà mentionné:

if 'Not Ok' in s:
    print("Found!")
1
not2qubit