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