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í:
- Python RegEx grupos múltiples 4 respuestas
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 .