Я хотел бы изменить следующее
<evenInstance><evenInstance><evenInstance><evenInstance><evenInstance>
к
<oddInstance><evenInstance><oddInstance><evenInstance><oddInstance>
Я получил следующее
<oddInstance><oddInstance><oddInstance><oddInstance><oddInstance><oddInstance>
быть
<oddInstance><evenInstance><oddInstance><evenInstance><oddInstance><evenInstance>
с регулярным выражением:
(odd(?:(?!odd).)*)odd((?:(?!odd).)*)
и замена:
\1even\2
Но я не знаю, как это сделать для странных случаев. Любая помощь приветствуется.
Первый шаблон можно сократить до
odd\Kodd(?=(?:oddodd)*$)
Заменить на even
Демонстрация регулярных выражений
Результат
oddevenoddevenoddeven
Для второго шаблона вы можете использовать:
even(?=(?:eveneven)*$)
Заменить на odd
Демонстрация регулярных выражений
Результат
oddevenoddevenodd
Это самый быстрый способ сделать это.
Использует конструкцию \G
.
(?s)(?:even|(?!^)\G.*?even.*?\Keven)
https://regex101.com/r/8BlRJx/1
Отформатировано
(?s)
(?:
even
|
(?! ^ )
\G
.*? even .*? \K even
)
Ориентир
Regex1: (?:even|(?!^)\G.*?even.*?\Keven)
Completed iterations: 3 / 3 ( x 1000 )
Matches found per iteration: 186
Elapsed Time: 1.02 s, 1023.95 ms, 1023953 µs
Matches per sec: 544,946