группа python re.sub: число после \ число - PullRequest
138 голосов
/ 13 мая 2011

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

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

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

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

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

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

1 Ответ

245 голосов
/ 13 мая 2011

Ответ:

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.

...