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
- Kotlin: Interface Queue no tiene constructores
- git - ¿Cómo puedo cambiar la URL de un proyecto en GitLab?
- python: los botones de verificación de Tkinter muestran por defecto un signo menos en Mac
- c# - Importar texto de directorio para crear una estructura de árbol
- administrador de rieles: filtro de gemas rails_admin con asociación has_many_through
- java - Android Obtenga dispositivos de almacenamiento OTG USB/TARJETA SD externa y sus rutas
- ruby - Cómo desactivar las claves primarias BIGINT en Rails 5.1
- swift3 - ¿Por qué el título no se muestra en la barra de navegación? rápido 3
- implementación: ¿cómo actualizar un servicio de enjambre docker sin replicación sin tiempo de inactividad?
- Excepción de tiempo de ejecución de ASP.NET Core MVC: "PrecompiledViews" extraviado
- android.content.ActivityNotFoundException: no se puede encontrar una clase de actividad explícita cuando se llama a StartActivity()
- c#: agregue una columna a la base de datos de SQL Server cuando cambie el año
- go - Golang: cómo construir una estructura para el archivo adjunto de canalización de Elasticsearch
- red neuronal - Caffe deployment.prototxt con múltiples entradas de diferentes dimensiones
- ios - La depuración de CoreNFC no funciona
Artículos calientes
- Los peligros de inhibir las prostaglandinas
- Que medicamento tomar para el dolor de hombro congelado
- ¿Cuál es el significado del divertículo intestinal?
- ¿Los niños del confinamiento pueden comer fruta?
- ¿Qué tan pronto puedo tener relaciones sexuales después de la cirugía de labios?
- Cuál es el mejor tratamiento para la espondilosis cervical
- Causas de la ruptura endometrial
- Cómo curar el reumatoide
- Cómo prevenir los pólipos intestinales
- Síntomas de la nefritis púrpura alérgica
- Cómo tratar la bronquitis y el asma
- ¿Se puede curar la artrosis de rodilla?
- ¿Qué causa la úlcera gástrica duodenal?
- rinitis alérgica
- ¿Cuál es la diferencia entre la tuberculosis bronquial y la tuberculosis pulmonar?