Respuestas:
Matchlos objetos siempre son verdaderos y Nonese devuelven si no hay coincidencia. Solo prueba la veracidad.
if re.match(...):
if re.match(...) is None:en su lugar
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?
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()
boolEl valor es necesario cuando la declaración condicional contiene una operación aritmética booleana. por ejemplo: if (re.search ("a", "abc") & True):
&es una operación bit a bit . andsería la operación booleana .
(re.search("a","abc") and True)
booldeja en claro al lector la intención del programador.
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.
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.
Nonees el valor predeterminado si no se devuelve nada explícitamente.
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