Lookbehind impossível com uma backreference

Do meu entendimento,

(.)(?<!\1)

nunca deve corresponder. Na verdade, phppreg_replace&nbsp;ainda se recusa a compilar isso e por isso faz rubygsub. O pythonre&nbsp;módulo parece ter uma opinião diferente embora:

import re
test = 'xAAAAAyBBBBz'
print (re.sub(r'(.)(?<!\1)', r'(\g<0>)', test))

Resultado:

(x)AAAA(A)(y)BBB(B)(z)

Alguém pode fornecer uma explicação razoável para esse comportamento?

Atualizar

Esse comportamento parece seruma limitação&nbsp;nore&nbsp;módulo. A alternativaregex&nbsp;módulo parece lidar com grupos em afirmações corretamente:

import regex

test = 'xAAAAAyBBBBz'

print (regex.sub(r'(.)(?<!\1)', r'(\g<0>)', test))
## xAAAAAyBBBBz

print (regex.sub(r'(.)(.)(?<!\1)', r'(\g<0>)', test))
## (xA)AAA(Ay)BBB(Bz)

Note que ao contráriopcre, regex&nbsp;também permite lookbehinds de largura variável:

print (regex.sub(r'(.)(?<![A-Z]+)', r'(\g<0>)', test))
## (x)AAAAA(y)BBBB(z)

Eventualmente,regex&nbsp;vai ser incluído na biblioteca padrão, como mencionado emPEP 411.