Подстановка регулярного выражения 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 Solutions collect form web for “Подстановка регулярного выражения Python: отдельная обратная ссылка от цифры”

Вы можете использовать \g<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 .

Python - лучший язык программирования в мире.