Это не ошибка, а исправление ошибки в Python 3.7 из коммита fbb490fd2f38bd817d99c20c05121ad0168a38ee .
В регулярном выражении сопоставление, отличное от нуля, перемещает позицию указателя в конецсовпадения, так что следующее утверждение, нулевой ширины или нет, может продолжать совпадать с позиции, следующей за совпадением.Таким образом, в вашем примере, после того, как .*
жадно сопоставляет и использует всю строку, тот факт, что указатель затем перемещается в конец строки, все еще фактически оставляет «пространство» для совпадения с нулевой шириной в этой позиции, что может бытьЭто видно из следующего кода, который ведет себя одинаково в Python 2.7, 3.6 и 3.7:
>>> re.findall(".*", 'sample text')
['sample text', '']
Таким образом, исправлена ошибка, связанная с заменой соответствия нулевой ширины сразу после ненулевой ширины.match, теперь корректно заменяет оба совпадения текстом замены.