Réponses:
Matchobjets sont toujours vrais et Nonesont renvoyés s'il n'y a pas de correspondance. Testez simplement la justesse.
if re.match(...):
if re.match(...) is None:place
re est conçu comme ça? Si les matchobjets sont toujours vrais, pourquoi ne revient-il pas simplement Trueà la première place, étant donné que nous avons toujours besoin de savoir si la réponse est vraie ou fausse de toute façon?
Si vous avez vraiment besoin Trueou False, utilisez simplementbool
>>> bool(re.search("hi", "abcdefghijkl"))
True
>>> bool(re.search("hi", "abcdefgijkl"))
False
Comme d'autres réponses l'ont souligné, si vous ne l'utilisez que comme condition pour un ifou while, vous pouvez l'utiliser directement sans l'envelopperbool()
boolvalue est nécessaire lorsque l'instruction conditionnelle contient une opération arithmétique booléenne. par exemple: if (re.search ("a", "abc") & True):
&est une opération au niveau du bit . andserait l' opération booléenne .
(re.search("a","abc") and True)
boolrend clairement l'intention du programmeur pour le lecteur.
Ignacio Vazquez-Abrams a raison. Mais pour élaborer, re.match()retournera soit None, qui évalue à False, soit un objet de correspondance, qui sera toujours Truecomme il l'a dit. Ce n'est que si vous voulez des informations sur la ou les parties qui correspondent à votre expression régulière que vous devez vérifier le contenu de l'objet de correspondance.
Une façon de procéder consiste simplement à effectuer un test par rapport à la valeur de retour. Parce que vous comprenez <_sre.SRE_Match object at ...>cela signifie que cela sera évalué comme vrai. Lorsque l'expression régulière ne correspond pas, vous obtenez la valeur de retour None, qui prend la valeur false.
import re
if re.search("c", "abcdef"):
print "hi"
Produit hicomme sortie.
Noneest la valeur par défaut si rien n'est explicitement renvoyé.
Vous pouvez utiliser re.match()ou re.search(). Python propose deux opérations primitives différentes basées sur des expressions régulières: re.match()vérifie une correspondance uniquement au début de la chaîne, tandis que re.search()vérifie une correspondance n'importe où dans la chaîne (c'est ce que Perl fait par défaut). référer ceci