Даже с новым движком RegEx в Notepad++ 6, который поддерживает PCRE (исходный код), нет здравого (т. Е. С линейной сложностью) и надежного (т. Е. Гарантированно работающего) подхода, который позволит вам добиться этого в одном Find & Replace, не говоря уже о один Поиск в файлах.
Вы можете, однако, добиться этого с помощью поиска в файлах дважды:
Добавьте матрицу подстановки к каждому вхождению любого из старых символов:
Find what: ([ÌÍÎÏÐÑ])
Replace with: ``\1`ÌH`ÍO`ÎΠ`ÏP`ÐC`ÑT``
Search Mode: Regular Expression
Это превращает, например, foo fooÌbar в foo``Ì`ÌH`ÍO`ÎΠ`ÏP`ÐC`ÑT``bar .
Замените каждый старый символ (и матрицу подстановки) соответствующим новым символом:
Find what: ``(.).*?`\1(.).*?``
Replace with: \2
Search Mode: Regular Expression
Это, например, преобразует foo``Ì`ÌH`ÍO`ÎΠ`ÏP`ÐC`ÑT``bar в H
Обратите внимание, что для этого вам нужно перейти на Notepad++ 6.0 или выше . В то время как само регулярное выражение также должно работать со старым движком RegEx, в общем есть ошибка, которая путает многобайтовые символы.
Как это устроено
Набор символов ([ÌÍÎÏÐÑ]) соответствует любому из этих пяти символов.
Скобки превращают это в первое подвыражение (см. Следующий пункт).
\1 символизирует совпадение первого подвыражения, то есть символа, который мы хотим заменить.
Все остальные персонажи трактуются буквально.
Выбор ` в качестве разделителя является произвольным. Вы можете использовать любой другой символ, который вы хотите.
(.) соответствует первому символу после `` .
Скобки превращают это в первое подвыражение.
.*? соответствует как можно меньшему числу символов.
`\1 ` следует матч первого подвыражения, то есть символ , который мы хотим заменить.
(.) соответствует первому символу после символа, который мы хотим заменить. По нашему замыслу, это его символ замены.
Скобки превращают это во второе подвыражение.
.*?`` соответствует как можно меньшему числу символов, пока не встретится последний `` .
Для получения дополнительной информации о регулярных выражениях, обратитесь к: