Подстановка регулярного выражения 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
, которая предшествует ей?
Ответы
Ответ 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>
, как указано в документах.