Tengo una expresión regular como esta:
regexp = u'ba[r|z|d]'
La función debe devolver True si la palabra contiene bar , baz o bad . En resumen, necesito regexp analógico para Python‘s
'any-string' in 'text'
¿Cómo puedo darme cuenta? ¡Gracias!
import re word = 'fubar' regexp = re.compile(r'ba[rzd]') if regexp.search(word): print 'matched'
El mejor por mucho es
bool(re.search('ba[rzd]', 'foobarrrr'))
Devuelve verdadero
Match
objetos Match
siempre son verdaderos, y None
se devuelve si no hay coincidencia. Sólo prueba de veracidad.
Código:
>>> st = 'bar' >>> m = re.match(r"ba[r|z|d]",st) >>> if m: ... m.group(0) ... 'bar'
Salida = bar
Si quieres funcionalidad de search
.
>>> st = "bar" >>> m = re.search(r"ba[r|z|d]",st) >>> if m is not None: ... m.group(0) ... 'bar'
y si no se encuentran regexp
de
>>> st = "hello" >>> m = re.search(r"ba[r|z|d]",st) >>> if m: ... m.group(0) ... else: ... print "no match" ... no match
Como @bukzor mencionó si st = foo bar
than match no funcionará. Por lo tanto, es más apropiado utilizar re.search
.
Aquí hay una función que hace lo que quieres:
import re def is_match(regex, text): pattern = re.compile(regex, text) return pattern.search(text) is not None
El método de búsqueda de expresiones regulares devuelve un objeto en caso de éxito y Ninguno si el patrón no se encuentra en la cadena. Con eso en mente, devolvemos True siempre y cuando la búsqueda nos devuelva algo.
Ejemplos:
>>> is_match('ba[rzd]', 'foobar') True >>> is_match('ba[zrd]', 'foobaz') True >>> is_match('ba[zrd]', 'foobad') True >>> is_match('ba[zrd]', 'foobam') False
Puedes hacer algo como esto:
El uso de la búsqueda devolverá un objeto SRE_match, si coincide con su cadena de búsqueda.
>>> import re >>> m = re.search(u'ba[r|z|d]', 'bar') >>> m <_sre.SRE_Match object at 0x02027288> >>> m.group() 'bar' >>> n = re.search(u'ba[r|z|d]', 'bas') >>> n.group()
Si no, se devolverá Ninguno.
Traceback (most recent call last): File "", line 1, in n.group() AttributeError: 'NoneType' object has no attribute 'group'
Y solo para imprimirlo para demostrar de nuevo:
>>> print n None