Python expression régulière ne correspondant pas à la
C'est une de ces choses où je suis sûr que je suis absent quelque chose de simple, mais... Dans l'exemple de programme ci-dessous, je suis en train d'utiliser Python RE bibliothèque pour analyser la chaîne "ligne" pour obtenir le nombre à virgule flottante juste avant le signe de pourcentage, c'est à dire "90.31". Mais le code s'affiche "aucun match".
J'ai essayé quelques autres expressions régulières ainsi, tous avec le même résultat. Ce qui me manque?
#!/usr/bin/python
import re
line = ' 0 repaired, 90.31% done'
pct_re = re.compile(' (\d+\.\d+)% done$')
#pct_re = re.compile(', (.+)% done$')
#pct_re = re.compile(' (\d+.*)% done$')
match = pct_re.match(line)
if match: print 'got match, pct=' + match.group(1)
else: print 'no match'
Je savais que c'était quelque chose de banal! Merci à tous pour vos réponses rapides et utiles.
OriginalL'auteur Matt | 2013-07-16
Vous devez vous connecter pour publier un commentaire.
match
seuls matchs de la début de la chaîne. Votre code fonctionne très bien si vous nepct_re.search(line)
à la place.OriginalL'auteur Daniel Roseman
Vous devez utiliser
re.findall
à la place:re.match
va correspondre au début de la chaîne. Donc, vous devez construire la regex pour l'intégralité de la chaîne.OriginalL'auteur Rohit Jain
essayer si vous voulez vraiment utiliser match:
r'...' est une "brute" de la chaîne d'ignorer certaines séquences d'échappement, ce qui est une bonne pratique à utiliser avec les regexp dans python. – kratenko (voir commentaire ci-dessous)
r'...'
est une "brute" de la chaîne d'ignorer certaines séquences d'échappement, ce qui est une bonne pratique à utiliser avec les regexp dans python.OriginalL'auteur Conan Li