Je recherche un regex
motif qui correspondra à la troisième, quatrième, ... occurrence de chaque caractère. Regardez ci-dessous pour des éclaircissements:
Par exemple, j'ai la chaîne suivante:
111aabbccxccybbzaa1
Je veux remplacer tous les caractères dupliqués après la deuxième occurrence. La sortie sera:
11-aabbccx--y--z---
Quelques modèles d'expression régulière que j'ai essayés jusqu'à présent:
En utilisant l'expression régulière suivante, je peux trouver la dernière occurrence de chaque caractère: (.)(?=.*\1)
Ou en utilisant celui-ci, je peux le faire pour les doublons consécutifs mais pas pour les doublons: ([a-zA-Z1-9])\1{2,}
(.)(?<=^(?:(?:(?!\1).)*\1){2,}(?:(?!\1).)*\1)
regex. Démo .
(.)(?<=(.*\1){3})
?
(.)(?<=(?:.*\1){3})
cela fera aussi l'affaire, mais tout cela n'est pas bon car un retour en arrière excessif peut causer des problèmes avec des chaînes plus longues. Je préfère écrire une méthode non regex pour résoudre le problème.
(.)(?<=(?:.*\1){3})
ms, 3 (.)(?<=(?:\1.*?){2}\1)
ms. Vous pouvez simplement vous tester. Le vôtre semble être le modèle le moins efficace et il est le plus difficile à lire.