Подтвердить что ты не робот

Подстановка регулярного выражения Python: отдельная обратная ссылка от цифры

В шаблоне замены регулярных выражений обратная ссылка выглядит как \1. Если вы хотите включить цифру после этой обратной ссылки, это не сработает, потому что эта цифра считается частью номера обратной ссылки:

# replace all twin digits by zeroes, but retain white space in between
re.sub(r"\d(\s*)\d", r"0\10", "0 1")
>>> sre_constants.error: invalid group reference

Шаблон замещения r"0\1 0" будет работать нормально, но в неудавшемся примере обратная ссылка \1 интерпретируется как \10.

Как цифра '0' может быть отделена от предыдущей ссылки \1, которая предшествует ей?

4b9b3361

Ответ 1

Вместо использования обратной ссылки с порядковым номером (\1) вы можете использовать именованные группы, и проблема решена:

# replace all twin digits by zeroes, but retain whitespace in between
re.sub(r"\d(?P<whitespace>\s*)\d", r"0\g<whitespace>0", "0 1")
>>> '0 0'

Оказывается, этот трюк фактически описан в документации re.sub.

Ответ 2

Вы можете использовать \g<1>, как указано в документах.