grupo re.sub de Python: número después de \número
¿Cómo puedo reemplazar foobar
con foo123bar
?
Esto no funciona:
>>> re.sub(r'(foo)', r'\1123', 'foobar')
'J3bar'
Esto funciona:
>>> re.sub(r'(foo)', r'\1hi', 'foobar')
'foohibar'
Aceptado
La respuesta es:
re.sub(r'(foo)', r'\g<1>123', 'foobar')
Extracto relevante de los documentos :
Además de los escapes de caracteres y las referencias inversas como se describe anteriormente,
\g<name>
se utilizará la subcadena que coincida con el grupo denominadoname
, según lo definido por la(?P<name>...)
sintaxis.\g<number>
utiliza el número de grupo correspondiente;\g<2>
por lo tanto es equivalente a\2
, pero no es ambiguo en un reemplazo como\g<2>0
.\20
se interpretaría como una referencia al grupo 20, no como una referencia al grupo 2 seguida del carácter literal'0'
. La referencia inversa\g<0>
sustituye en toda la subcadena que coincide con el RE.