Python re.sub group: число после\число

Как заменить foobar на foo123bar?

Это не работает:

>>> re.sub(r'(foo)', r'\1123', 'foobar')
'J3bar'

Это работает:

>>> re.sub(r'(foo)', r'\1hi', 'foobar')
'foohibar'

Я думаю, что это общая проблема: number after\number. Кто-нибудь может дать мне понять, как с этим справиться?

Ответ 1

Ответ:

re.sub(r'(foo)', r'\g<1>123', 'foobar')

Соответствующая выдержка из документов:

В дополнение к экранированию символов и обратные ссылки, как описано выше, \ g будет использовать подстроку сопоставляются группой с именем name, as определяемый синтаксисом (? P...). \ g использует соответствующий номер группы; Следовательно, \g < 2 > эквивалентно\2, но не является двусмысленным в замене, таком как \g < 2 > 0.\20 будет интерпретироваться как ссылка на группа 20, а не ссылка на группу 2 за которым следует буквальный символ "0". Обратная ссылка \g < 0 > заменяет вся подстрока, соответствующая RE.