Python regex, cómo reemplazar múltiples grupos de múltiples coincidencias


Tengo el presentimiento de que no veo la solución simple a esto, así que antes de arrancarme los pelos, tal vez alguien pueda ayudarme.

Este es un poco de código:

gr = regex.compile(r'({[^{]*(?>{[^{}]+})*)\s\over\s([^{}]+(?>{[^{}]*})*})')
string1 = "{a \over b}"
string2 = "{x \over b{x}} {{d}d \over x}}"

m = regex.match(gr,string2)

reLine = regex.sub(gr,r"\test"+m.group(1)+"}{"+m.group(2),string2)

El objetivo es básicamente este:

before {a \over b}
after \test{a}{b}

Y tengo que revisar el archivo de texto y reemplazar todas estas coincidencias.

Mi problema es que con regex.search o regex.match solo coincide una vez y devuelve una coincidencia con sus grupos, pero necesito varias coincidencias en caso de que {a \over b} se repita varias veces en el same línea.

Así que con 'string2' captura '{x' como el primer grupo, 'b{x}}' como el segundo y deja de capturar. Entonces, cuando trato de reemplazar, también reemplaza los grupos de la primera coincidencia con la segunda ecuación '\over'.

He practicado expresiones regulares en regexr.com y tiene una función de 'reemplazo'. Toma todos los partidos y reemplaza ($1,$2) todos los partidos y grupos respectivamente.

¿Me estoy perdiendo algo en el módulo de expresiones regulares de Python? ¿O este problema es más complicado?d de lo que imaginaba?

Gracias.



------------Respuesta------------

A cualquier persona interesada: Después de pensarlo un poco, resolví mi propio problema usando regex.split.

Divido toda la línea capturando coincidencias más amplias y luego reemplazando cada coincidencia individualmente.

Etiquetas:

Artículos relacionados:

javascript - Reordenación de elementos en dos listas

c++ - Símbolos indefinidos para arquitectura x86_64 biblioteca jsonrpc