Я шукаю regex
шаблон, який буде відповідати третьому, четвертому, ... появі кожного персонажа. Подивіться нижче для уточнення:
Наприклад, у мене є такий рядок:
111aabbccxccybbzaa1
Я хочу замінити всі дублювані символи після другого появи. Вихід буде:
11-aabbccx--y--z---
Деякі зразки регексу, які я спробував поки що:
Використовуючи наступний вираз, я можу знайти останнє виникнення кожного символу: (.)(?=.*\1)
Або використовуючи цей, я можу це зробити для послідовних дублікатів, але не для дублікатів: ([a-zA-Z1-9])\1{2,}
(.)(?<=^(?:(?:(?!\1).)*\1){2,}(?:(?!\1).)*\1)
регулярним виразом. Демо .
(.)(?<=(.*\1){3})
?
(.)(?<=(?:.*\1){3})
буде виконувати цю роботу, але все це не дуже добре, оскільки надмірне зволікання може спричинити проблеми з довшими рядками. Я б скоріше написав нерегексивний метод для вирішення проблеми.
(.)(?<=(?:.*\1){3})
25 мс, (.)(?<=(?:\1.*?){2}\1)
3 мс. Можна просто випробувати себе. Ваші, здається, найменш ефективні, і це найважче для читання.