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

2 ответа

Решение

Вместо использования обратной ссылки с порядковым номером (\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.

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

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