Unmögliches Aussehen hinter einem Rückverweis
Meinem Verständnis nach,
<code>(.)(?<!\1) </code>
sollte nie passen. Eigentlich php'spreg_replace
weigert sich sogar, dies zu kompilieren, und Rubys auchgsub
. Die Pythonre
Modul scheint jedoch eine andere Meinung zu haben:
<code>import re test = 'xAAAAAyBBBBz' print (re.sub(r'(.)(?<!\1)', r'(\g<0>)', test)) </code>
Ergebnis:
<code>(x)AAAA(A)(y)BBB(B)(z) </code>
Kann jemand eine vernünftige Erklärung für dieses Verhalten liefern?
AktualisierenDieses Verhalten scheint zu seineine Einschränkung in demre
Modul. Die Alternativeregex
Modul scheint Gruppen in Zusicherungen korrekt zu behandeln:
<code>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) </code>
Beachten Sie, dass im Gegensatz zupcre
, regex
ermöglicht auch Lookbehinds mit variabler Breite:
<code>print (regex.sub(r'(.)(?<![A-Z]+)', r'(\g<0>)', test)) ## (x)AAAAA(y)BBBB(z) </code>
Schließlich,regex
wird in die Standardbibliothek aufgenommen, wie inPEP 411.