example escape python regex

python - escape - cadena de retorno con la primera coincidencia Regex



python split regex (6)

No deberías usar .findall() en absoluto: .search() es lo que quieres. Encuentra la coincidencia más a la izquierda, que es lo que desea (o devuelve None si no existe ninguna coincidencia)

m = re.search(pattern, text) result = m.group(0) if m else ""

Si quiere poner eso en una función depende de usted. Es inusual querer devolver una cadena vacía si no se encuentra una coincidencia, razón por la cual no se incorpora nada de eso. Es imposible confundirse acerca de si .search() por sí solo encuentra una coincidencia (no devuelve None si no lo hizo) t, o un objeto SRE_Match si lo hizo).

Quiero obtener el primer partido de una expresión regular.

En este caso, obtuve una lista:

text = ''aa33bbb44'' re.findall(''/d+'',text)

[''33'', ''44'']

Podría extraer el primer elemento de la lista:

text = ''aa33bbb44'' re.findall(''/d+'',text)[0]

''33''

Pero eso solo funciona si hay al menos una coincidencia, de lo contrario obtendré un error:

text = ''aazzzbbb'' re.findall(''/d+'',text)[0]

IndexError: lista de índice fuera de rango

En cuyo caso podría definir una función:

def return_first_match(text): try: result = re.findall(''/d+'',text)[0] except Exception, IndexError: result = '''' return result

¿Hay alguna forma de obtener ese resultado sin definir una nueva función?


Puede incrustar el '''' predeterminado en su expresión regular agregando |$ :

>>> re.findall(''/d+|$'', ''aa33bbb44'')[0] ''33'' >>> re.findall(''/d+|$'', ''aazzzbbb'')[0] '''' >>> re.findall(''/d+|$'', '''')[0] ''''

También funciona con re.search señalado por otros:

>>> re.search(''/d+|$'', ''aa33bbb44'').group() ''33'' >>> re.search(''/d+|$'', ''aazzzbbb'').group() '''' >>> re.search(''/d+|$'', '''').group() ''''


Si solo necesita la primera coincidencia, use re.search lugar de re.findall :

>>> m = re.search(''/d+'', ''aa33bbb44'') >>> m.group() ''33'' >>> m = re.search(''/d+'', ''aazzzbbb'') >>> m.group() Traceback (most recent call last): File "<pyshell#281>", line 1, in <module> m.group() AttributeError: ''NoneType'' object has no attribute ''group''

Entonces puede usar m como condición de verificación como:

>>> m = re.search(''/d+'', ''aa33bbb44'') >>> if m: print(''First number found = {}''.format(m.group())) else: print(''Not Found'') First number found = 33


Tal vez esto funcionaría un poco mejor en caso de que una mayor cantidad de datos de entrada no contenga la pieza que desea porque, excepto que tiene un mayor costo.

def return_first_match(text): result = re.findall(''/d+'',text) result = result[0] if result else "" return result


Tu puedes hacer:

x = re.findall(''/d+'', text) result = x[0] if len(x) > 0 else ''''

Tenga en cuenta que su pregunta no está exactamente relacionada con la expresión regular. Más bien, ¿cómo puede encontrar con seguridad un elemento de una matriz, si no tiene ninguno?


Yo iría con:

r = re.search("/d+", ch) result = return r.group(0) if r else ""

re.search solo busca la primera coincidencia en la cadena de todos modos, por lo que creo que hace que su intención sea un poco más clara que usar findall .