Saya mencari regex
pola yang akan cocok dengan ketiga, keempat, ... kemunculan setiap karakter. Lihat di bawah untuk klarifikasi:
Misalnya saya punya string berikut:
111aabbccxccybbzaa1
Saya ingin mengganti semua karakter yang digandakan setelah kejadian kedua. Outputnya adalah:
11-aabbccx--y--z---
Beberapa pola regex yang saya coba sejauh ini:
Dengan menggunakan regex berikut ini, saya dapat menemukan kemunculan terakhir dari setiap karakter: (.)(?=.*\1)
Atau menggunakan ini saya bisa melakukannya untuk duplikat berturut-turut tetapi tidak untuk duplikat: ([a-zA-Z1-9])\1{2,}
(.)(?<=^(?:(?:(?!\1).)*\1){2,}(?:(?!\1).)*\1)
regex. Demo .
(.)(?<=(.*\1){3})
?
(.)(?<=(?:.*\1){3})
akan melakukan pekerjaan itu juga, tetapi semua ini tidak bagus karena pengulangan yang berlebihan dapat menyebabkan masalah dengan string yang lebih panjang. Saya lebih suka menulis metode non-regex untuk menyelesaikan masalah.
(.)(?<=(?:.*\1){3})
25ms, (.)(?<=(?:\1.*?){2}\1)
3ms. Anda bisa saja menguji diri sendiri. Pola Anda tampaknya paling tidak efisien dan paling sulit dibaca.