Группа 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.