Les expressions régulières Python renvoient vrai / faux


114

En utilisant les expressions régulières Python, comment obtenir un True/ Falserenvoyé? Tous les retours Python sont:

<_sre.SRE_Match object at ...>

Réponses:


140

Matchobjets sont toujours vrais et Nonesont renvoyés s'il n'y a pas de correspondance. Testez simplement la justesse.

if re.match(...):

21
re.match (...) renverrait true si la partie de début de la chaîne correspond au modèle normal. Pendant que la recherche confirmera le modèle n'importe où dans la chaîne.
Yu Shen

8
Il peut être plus souhaitable d'utiliser à la if re.match(...) is None:place
NuclearPeon

désolé, avez-vous répondu aux commentaires dans votre réponse? Ce n'est pas clair pour moi, cela vous dérange-t-il de clarifier?
Charlie Parker

2
Puis-je demander pourquoi 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?
ytu

1
@ytu: Parce qu'alors, vous pouvez faire tout ce dont vous avez besoin .
Ignacio Vazquez-Abrams

149

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()


1
boolvalue est nécessaire lorsque l'instruction conditionnelle contient une opération arithmétique booléenne. par exemple: if (re.search ("a", "abc") & True):
Aizzat Suhardi

2
@AizzatSuhardi, &est une opération au niveau du bit . andserait l' opération booléenne .
John La Rooy

1
merci @JohnLaRooy. correction:(re.search("a","abc") and True)
Aizzat Suhardi

en quoi est-ce différent de la réponse d'ignacio?
Charlie Parker

2
L'emballage boolrend clairement l'intention du programmeur pour le lecteur.
Guilherme Salomé

10

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.


6

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.


Vous obtenez toujours une valeur de retour; Noneest la valeur par défaut si rien n'est explicitement renvoyé.
Ignacio Vazquez-Abrams

Merci - corrigé cela. J'allais juste par ce que j'ai vu dans la REPL.
Gavin Anderegg

4

Voici ma méthode:

import re
# Compile
p = re.compile(r'hi')
# Match and print
print bool(p.match("abcdefghijkl"))

1
p = re.comp il e (r'hi ') :-P
Clay

ouais et il retourne "False"
Ufos

si vous changez matchen search, il retournera True
alofgran

1

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

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.