2011-07-04 27 views

Respuesta

69

Match objetos son siempre verdaderas, y None se devuelve si no hay ninguna coincidencia. Solo prueba la veracidad.

if re.match(...): 
+12

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 lugar de la cadena. –

+2

Puede ser más conveniente usar '' si re.match (...) es None: '' en su lugar – NuclearPeon

+0

lo siento, ¿ha dirigido los comentarios en su respuesta? No está claro para mí, ¿te importa aclarar? –

5

Ignacio Vazquez-Abrams es correcto. Pero para elaborar, re.match() devolverá None, que se evalúa como False, o un objeto de coincidencia, que siempre será True como dijo. Solo si desea información sobre la (s) parte (s) que coinciden con su expresión regular, necesita verificar el contenido del objeto coincidente.

4

Una forma de hacerlo es solo para comprobar el valor de retorno. Como obtiene <_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 hi como salida.

+0

* siempre * obtienes un valor de retorno; 'None' es el valor predeterminado si no se devuelve nada explícitamente. –

+0

Gracias - corrigió eso. Estaba siguiendo lo que vi en el REPL. –

79

Si realmente necesita True o False, sólo tiene que utilizar bool

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

Como otras respuestas han señalado, si usted está usando como una condición para una if o while, que se puede utilizar directamente sin envolviendo en bool()

+0

valor 'bool' es necesario cuando la instrucción condicional contiene una operación aritmética booleana. por ejemplo: if (re.search ("a", "abc") & True): –

+1

@AizzatSuhardi, '&' es una ** operación bit a bit **. 'y' sería la operación ** boolean **. –

+0

gracias @JohnLaRooy. corrección: '(re.search (" a "," abc ") y True)' –

Cuestiones relacionadas