Группа python re.sub: число после \ число

Как я могу заменить 'foobar' на 'foo123bar'?

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

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

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

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

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

1 ответ

Решение

Ответ:

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

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

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

Другие вопросы по тегам