Comment puis-je remplacer foobar
par foo123bar
?
Cela ne marche pas:
>>> re.sub(r'(foo)', r'\1123', 'foobar')
'J3bar'
Cela marche:
>>> re.sub(r'(foo)', r'\1hi', 'foobar')
'foohibar'
Je pense que c'est un problème commun quand on a quelque chose comme \number
. Quelqu'un peut-il me donner un indice sur la façon de gérer cela?
La réponse est:
re.sub(r'(foo)', r'\g<1>123', 'foobar')
Extrait pertinent de la documentation:
En plus des caractères d'échappement et des références arrières décrits ci-dessus,\g utilisera la sous-chaîne associée au groupe nommé name, tel que défini par la syntaxe (? P ...).\g utilise le numéro de groupe correspondant;\g <2> est donc équivalent à\2, mais n’est pas ambigu dans un remplacement tel que\g <2> 0.\20 serait interprété comme une référence au groupe 20, et non comme une référence au groupe 2 suivi du caractère littéral "0". La référence arrière\g <0> se substitue dans la sous-chaîne entière mise en correspondance par le RE.