Подстановка в регулярных выражениях 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.