Réponses:
Match
objets sont toujours vrais et None
sont 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 match
objets 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 True
ou 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 if
ou while
, vous pouvez l'utiliser directement sans l'envelopperbool()
bool
value 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 . and
serait l' opération booléenne .
(re.search("a","abc") and True)
bool
rend 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 True
comme 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 hi
comme sortie.
None
est 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