Почему\g <0> ведет себя иначе, чем \0 в re.sub?

Я использую Python 3.3

re.sub("(.)(.)",r"\2\1\g<0>","ab")  returns baab

НО

re.sub("(.)(.)",r"\2\1\0","ab")  returns ba

Является ли это ошибкой в ​​методе sub или почему-то метод sub не распознает \0 по какой-либо причине?

Ответ 1

Как написанный на этой странице, \0 интерпретируется как нулевой символ (\x00), а номер группы начинается с 1 в Python (согласно документации модуля re):

\ число

Соответствует содержимому группы с тем же номером. Группы нумеруются начиная с 1. Например, (.+) \1 соответствует '' или '55 55 ', но не' thethe '(обратите внимание на пробел после группы). Эта специальная последовательность может использоваться только для соответствия одной из первых 99 групп. Если первая цифра числа равна 0, или число равно 3 восьмеричным цифрам, , это не будет интерпретироваться как групповое соответствие, а как символ с восьмеричным номером. Внутри '[' и ']' класса символов все числовые escape-последовательности рассматриваются как символы.

Кроме того, согласно предыдущей ссылке, это не ошибка, а желаемое поведение (это очевидно, поскольку она задокументирована).