2009-02-13 8 views
5

Tengo un bloque de texto, y para cada coincidencia de expresiones regulares, quiero sustituir esa coincidencia con el valor de retorno de otra función. El argumento para esta función es, por supuesto, el texto coincidente.Python usando el resultado de la función para la Expresión Regular Sustitución

He estado teniendo problemas tratando de encontrar una solución de un solo paso para este problema. Parece que debería ser bastante simple.

Respuesta

14

Desde the documentation:

>>> def dashrepl(matchobj): 
...  if matchobj.group(0) == '-': return ' ' 
...  else: return '-' 
>>> re.sub('-{1,2}', dashrepl, 'pro----gram-files') 
'pro--gram files' 
+0

Maldición, simplemente asumí que podría ser una cadena en esa función – esiegel

0

Python-agnóstico: Coincidir todo antes y todo después de su texto que desea sustituir.

/^(.*?)(your regexp to match)(.*)$/ 

Luego tiene el siguiente antes y después del texto que va a reemplazar. El resto es fácil: solo inserte el resultado de su función entre las dos cuerdas.

+0

El OP dijo "para cada coincidencia", por lo que describió solo la mitad del algoritmo. En cualquier caso, se ha dado y elegido la respuesta adecuada. – tzot

Cuestiones relacionadas