¿Cómo reemplazar una nueva coincidencia con una transformación de esa coincidencia?

Por ejemplo, tengo una cadena:

The struct-of-application and struct-of-world 

Con re.sub , reemplazará la coincidencia con una cadena predefinida. ¿Cómo puedo reemplazar la coincidencia con una transformación del contenido coincidente? Para obtener, por ejemplo:

 The [application_of_struct](http://application_of_struct) and [world-of-struct](http://world-of-struct) 

Si escribo una expresión regular ((\w+-)+\w+) y trato de usar re.sub , parece que no puedo usar lo que hice coincidir como parte del reemplazo, y mucho menos editar el contenido coincidente:

 In [10]: p.sub('struct','The struct-of-application and struct-of-world') Out[10]: 'The struct and struct' 

Utilice una función para el reemplazo.

 s = 'The struct-of-application and struct-of-world' p = re.compile('((\w+-)+\w+)') def replace(match): return 'http://{}'.format(match.group()) #for python 3.6+ ... #return f'http://{match.group()}' >>> p.sub(replace, s) 'The http://struct-of-application and http://struct-of-world' >>> 

Prueba esto:

 >>> p = re.compile(r"((\w+-)+\w+)") >>> p.sub('[\\1](http://\\1)','The struct-of-application and struct-of-world') 'The [struct-of-application](http://struct-of-application) and [struct-of-world](http://struct-of-world)'