Regex pour supprimer les caractères et combinaisons dupliqués
J'ai une chaîne qui se compose de mots qui ont des caractères dupliqués à la fin. Ces caractères peuvent être dans de telles combinaisons:
- wordxxxx
- wordxyxyxy
- motxyzxyzxyz
Par exemple:
string = "Thisssssssss isisisis echooooooo stringggg. Replaceaceaceace a répété les groupes de symbolessss"
J'ai trouvé un moyen de remplacer certaines des combinaisons répétées, de cette façon:
re.sub(r'([a-z]{1,3})\1+', r'\1', string)
J'obtiens ces résultats:
C'est un écho-stringg. Remplacer des groupes répétés de symboles
Comment dois-je changer l'expression régulière pour supprimer TOUS les caractères répétés et leurs combinaisons?
Votre regex est presque correcte.
Vous devez ajouter
?
au groupe de capture, afin qu'il corresponde aussi peu que possible ("correspondance paresseuse" plutôt que le comportement par défaut "gourmand" qui correspond autant que possible).J'ai également utilisé à la
+
place de{1,3}
car limiter la répétition à3
semblait arbitraire.Vous pouvez observer la différence entre les deux comportements: gourmand vs paresseux . Notez que:
Le comportement avide voit
aaaa
commeaa * 2
plutôt quea * 4
Le comportement gourmand ne fonctionne que pour les répétitions de même longueur.
aaaaa
est vu commeaa * 2 + a
ainsi le résultat de remplacement seraitaaa
au lieu dea
.
for word in "Thisssssssss isisisis echooooooo stringggg. Replaceaceaceace repeatedededed groupssss of symbolssss".split():
print(re.sub(r'([a-z]+?)\1+', r'\1', word))
les sorties
This
is
echo
string.
Replace
repeated
groups
of
symbols