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