Sto cercando un regex
modello che corrisponda alla terza, quarta, ... occorrenza di ciascun personaggio. Guarda sotto per chiarimenti:
Ad esempio ho la seguente stringa:
111aabbccxccybbzaa1
Voglio sostituire tutti i caratteri duplicati dopo la seconda occorrenza. L'output sarà:
11-aabbccx--y--z---
Alcuni schemi regex che ho provato finora:
Utilizzando la seguente regex posso trovare l'ultima occorrenza di ciascun personaggio: (.)(?=.*\1)
O usando questo posso farlo per duplicati consecutivi ma non per duplicati: ([a-zA-Z1-9])\1{2,}
(.)(?<=^(?:(?:(?!\1).)*\1){2,}(?:(?!\1).)*\1)
regex. Demo .
(.)(?<=(.*\1){3})
?
(.)(?<=(?:.*\1){3})
farà anche il lavoro, ma tutti questi non sono buoni poiché un eccessivo backtracking può causare problemi con stringhe più lunghe. Preferirei scrivere un metodo non regex per risolvere il problema.
(.)(?<=(?:.*\1){3})
25ms, (.)(?<=(?:\1.*?){2}\1)
3ms. Puoi solo metterti alla prova. Il tuo sembra essere il modello meno efficiente ed è più difficile da leggere.