Estoy tratando de eliminar algunas cosas de un bloque de texto usando expresiones regulares. Tengo todos mis patrones listos, pero parece que no puedo eliminar dos (o más) que se superponen.Combinación de varias sustituciones de expresiones regulares
Por ejemplo:
import re
r1 = r'I am'
r2 = r'am foo'
text = 'I am foo'
re.sub(r1, '', text) # Returns ' foo'
re.sub(r2, '', text) # Returns 'I '
¿Cómo reemplazo tanto de los sucesos simultáneamente y terminan con una cadena vacía?
Terminé usando una versión ligeramente modificada de Ned Batchelder's answer:
def clean(self, text):
mask = bytearray(len(text))
for pattern in patterns:
for match in re.finditer(pattern, text):
r = range(match.start(), match.end())
mask[r] = 'x' * len(r)
return ''.join(character for character, bit in zip(text, mask) if not bit)
Nunca pensé en los atributos 'start' y' end' para los objetos de coincidencia. Estoy más que seguro de que esto funcionará, ¡así que gracias! – Blender
¡Gran respuesta! Agregué '()' a 'inicio' y' fin', porque estos son métodos, no atributos. – georg
@ thg435: gracias, debería haberlo probado! :) –