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 ...>
personne
la source

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(...):
Ignacio Vazquez-Abrams
la source
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()

John La Rooy
la source
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.

cory
la source
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.

Gavin Anderegg
la source
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"))
Vaibhav Desai
la source
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

Sashini Hettiarachchi
la source