online escape python regex

escape - Python regexes: ¿Cómo acceder a múltiples coincidencias de un grupo?



python regex space (2)

El módulo regex soluciona esto, agregando un método .captures :

>>> m = regex.match(r"(..)+", "a1b2c3") >>> m.captures(1) [''a1'', ''b2'', ''c3'']

Esta pregunta ya tiene una respuesta aquí:

Estoy armando una expresión regular bastante compleja. Una parte de la expresión coincide con cadenas como ''+ a'', ''-57'', etc. A + o a - seguido de cualquier número de letras o números. Quiero hacer coincidir 0 o más cadenas que coinciden con este patrón.

Esta es la expresión que se me ocurrió:

([/+-][a-zA-Z0-9]+)*

Si tuviera que buscar la cadena ''-56 + a'' usando este patrón, esperaría obtener dos coincidencias:

+ a y -56

Sin embargo, solo me devuelven el último partido:

>>> m = re.match("([/+-][a-zA-Z0-9]+)*", ''-56+a'') >>> m.groups() (''+a'',)

Mirando los documentos de python veo que:

Si un grupo coincide varias veces, solo se puede acceder a la última coincidencia:

>>> m = re.match(r"(..)+", "a1b2c3") # Matches 3 times. >>> m.group(1) # Returns only the last match. ''c3''

Entonces, mi pregunta es: ¿cómo acceder a varias coincidencias de grupo?

Gracias de antemano por tu ayuda.

Tom


Suelte el * de su expresión regular (para que coincida exactamente con una instancia de su patrón). Luego use re.findall(...) o re.finditer (vea here ) para devolver todas las coincidencias.

Actualizar:

Parece que esencialmente estás construyendo un analizador de descenso recursivo . Para tareas de análisis relativamente simples, es bastante común y completamente razonable hacerlo a mano. Si está interesado en una solución de biblioteca (por ejemplo, en caso de que su tarea de análisis se vuelva más complicada más adelante), eche un vistazo a los pyparsing .