Las expresiones regulares de Python devuelven verdadero / falso

114

Usando expresiones regulares de Python, ¿cómo se puede obtener un True/ Falsedevuelto? Todos los retornos de Python son:

<_sre.SRE_Match object at ...>
nadie
fuente

Respuestas:

140

Matchlos objetos siempre son verdaderos y Nonese devuelven si no hay coincidencia. Solo prueba la veracidad.

if re.match(...):
Ignacio Vázquez-Abrams
fuente
21
re.match (...) devolvería verdadero si la parte inicial de la cadena coincide con el patrón regular. Mientras que la búsqueda confirmará el patrón en cualquier parte de la cadena.
Yu Shen
8
Puede ser más conveniente usarlo if re.match(...) is None:en su lugar
NuclearPeon
lo siento, ¿abordó los comentarios en su respuesta? No me queda claro, ¿te importaría aclararlo?
Charlie Parker
2
¿Puedo preguntar por qué re está diseñado así? Si los matchobjetos siempre son verdaderos, ¿por qué no regresan Trueen primer lugar, dado que siempre necesitamos saber si la respuesta es verdadera o falsa de todos modos?
ytu
1
@ytu: Porque entonces puedes hacer todo lo que necesites .
Ignacio Vazquez-Abrams
149

Si realmente necesita Trueo False, simplemente usebool

>>> bool(re.search("hi", "abcdefghijkl"))
True
>>> bool(re.search("hi", "abcdefgijkl"))
False

Como han señalado otras respuestas, si solo lo está usando como condición para un ifo while, puede usarlo directamente sin envolver enbool()

John La Rooy
fuente
1
boolEl valor es necesario cuando la declaración condicional contiene una operación aritmética booleana. por ejemplo: if (re.search ("a", "abc") & True):
Aizzat Suhardi
2
@AizzatSuhardi, &es una operación bit a bit . andsería la operación booleana .
John La Rooy
1
gracias @JohnLaRooy. corrección:(re.search("a","abc") and True)
Aizzat Suhardi
¿en qué se diferencia esto de la respuesta de ignacio?
Charlie Parker
2
El resumen booldeja en claro al lector la intención del programador.
Guilherme Salomé
10

Ignacio Vázquez-Abrams tiene razón. Pero para elaborar, re.match()devolverá None, que se evalúa como False, o un objeto de coincidencia, que siempre será Truecomo dijo. Solo si desea información sobre las partes que coinciden con su expresión regular, debe verificar el contenido del objeto de coincidencia.

cory
fuente
6

Una forma de hacer esto es simplemente contrastar el valor de retorno. Porque lo está obteniendo <_sre.SRE_Match object at ...>significa que esto se evaluará como verdadero. Cuando la expresión regular no coincide, obtendrá el valor de retorno Ninguno, que se evalúa como falso.

import re

if re.search("c", "abcdef"):
    print "hi"

Produce hicomo salida.

Gavin Anderegg
fuente
Usted siempre se obtiene un valor de retorno; Nonees el valor predeterminado si no se devuelve nada explícitamente.
Ignacio Vazquez-Abrams
Gracias - corrigió eso. Simplemente me guiaba por lo que vi en el REPL.
Gavin Anderegg
4

Aquí está mi método:

import re
# Compile
p = re.compile(r'hi')
# Match and print
print bool(p.match("abcdefghijkl"))
Vaibhav Desai
fuente
1
p = re.comp il e (r'hi ') :-P
Clay
sí, y devuelve "Falso"
Ufos
si cambia matcha search, devolverá True
alofgran
1

Puede usar re.match()o re.search(). Python ofrece dos operaciones primitivas diferentes basadas en expresiones regulares: re.match()busca una coincidencia solo al principio de la cadena, mientras que re.search()busca una coincidencia en cualquier parte de la cadena (esto es lo que hace Perl por defecto). referir esto

Sashini Hettiarachchi
fuente