Поиск и замена с помощью регулярных выражений в notepad++

Хотя эта статья гордо и названа «Поиск и замена с помощью регулярных выражений в notepad++», это скорее небольшая шпаргалка. Смысл её в том, что иногда мне бывает нужно что-то поменять, добавить или удалить в тексте. Как и всякий ленивый человек, я пытаюсь этот процесс облегчить, ускорить, короче оптимизировать и автоматизировать. Другими совами, я где-то, когда-то, что-то узнал про регулярные выражения, попробовал, у меня получилось, мне понравилось. Но так уж сложилось, я быстро забываю, что и как делал.

Это небольшое отступление к тому, что если вы знаете регулярные выражения и умеете ими пользоваться, это статья не для вас, но спасибо, что заглянули.

Хотя наверное следует сделать небольшое отступление, для тех кто вообще не в курсе, но хотел бы научиться.

Регулярное выражение – это шаблон текста, который состоит из обычных символов (например, букв от а до я) и специальных символов, известных как метасимволы. Шаблон задает правила поиска и может осуществлять различные манипуляции с текстом.

Далее приведены метасимволы и их значение, а затем уже примеры применения.

СимволОписание
1.Точка представляет один любой символ
2^Начало строки
3$Конец строки
4^$Пустая строка (начало и конец, между которыми пусто)
5.+Любая не пустая строка
6\sПробел
7\SНе Пробел
8\wБуква, цифра или подчеркивание
9\dЛюбая цифра
10\DЛюбой символ, но не цифра
11[0-9]Любая цифра
12[a-z]Любая буква от a до z (весь латинский набор символов) в нижнем регистре
13[A-Z]Любая буква от a до z в ВЕРХНЕМ регистре
14[a-zA-Z]Любая буква от a до z в любом регистре
15[a-Z]То же самое
16*«Повторитель». Означает, что предшествующий символ может повторяться (0 или более раз)
17.*Абсолютно любой набор символов. Например, условие <p>.*</p> найдет любой текст между тегами <p> </p>
18(^.*$)Любой текст между началом и концом строки
19([0-9][0-9]*.) Ищет любые цифры, в данном случае двухзначные цифры
20\nИщет символ новой строки
21\rИщет пустые строки содержащий символы «перевод каретки»
22^$Ищет пустые строки
23\n\r Ищет пустые строки содержащий символы – символ новой строки и «перевод каретки»
24\sИщет класс пробельных символов. К пробельным символам относятся пробел, символ табуляции, возврат каретки, символ новой строки и символ перевода страницы. То же самое, что и [ \t,\r,\n,\f]
25\SИщет класс не пробельных символов. То же самое, что и [^ \t, \r,\n,\f]
261^\s*$Ищет пустые строки содержащие пробел
272^[ ]*$Ищет пустые строки содержащие пробел
28^ТестИщет слово «Тест» в начале строки
29Тест$Ищет слово «Тест» в конце строки
30\bтомИщет набор символов «том», только в начале слов, то есть в слове «Томск»будет найдено, а в слове Потом нет
31том\b Ищет набор символов «том», только в конце слов, то есть в слове «Томск» не будет найдено, а в слове «Потом» будет
32\Bтом\B Ищет набор символов «том», не в начале и не в конце слов, то есть в слове «Томск» не будет найдено, и в слове «Потом» нет, а вот в словах Автоматизация, Хрестоматия будет найдено

1, 2 Также следует отметить, что часть примеров уже устарела, в том смысле, что notepad++ совершенствуется, что не может не радовать, и часть примеров делается стандартными командами.

Например, «Удалить пустые строки содержащие пробел» сейчас выполняется через меню «Правка» – «Операции со строками». Что лишний раз показывает их актуальность, раз они были включены в штатный набор, значит весьма многие этого хотели. Кроме того, по этому примеру можно разрабатывать свои алгоритмы поиска и замены, поэтому они оставлены.

Примеры применения регулярных выражений для поиска и замены3:
1.
Найти (^.*$)
Заменить \1\n\r
Находит новую строку и добавляет к ней пустую строку
2.
Найти $ 
Заменить  </br>\1 
Находит конец строки и добавляет к ней тег </br>
3.
Найти (^.*$)
Заменить <p>\1</p>
Находит новую строку и заключает её в теги абзаца <p></p>
4.
Найти (^.*$)
Заменить <li>\1</li> 
Находит новую строку и заключает её в теги списка <li></li>
5.
Найти ^.* в ред. Федерального закона .*$
Пример 5, это более сложный пример поиска, в данном выражении применены следующие условия поиска:
- Найти в тексте начало новой строки(абзаца) ^ в которой может быть любой текст  .* как до начала фразы
 в ред. Федерального закона, так и после .* неё до конца $ строки(абзаца)

3 Графическое изображение примера

Поиск и замена с помощью регулярных выражений в notepad++
рисунок 1

Пример 5 может сначала показаться лишенным смысла, так как эти же самые условия можно получить просто введя в поиск в ред. Федерального закона, однако возможно вам необходимо, например:

- чтобы поиск не учитывал фразу в ред. Федерального закона, если именно с неё начинается строка, и таких строк великое множество;

- вы собираетесь до и после искомой фразы добавить что-то такое эдакое, например начало новой строки или даже пустую строку, чтобы в дальнейшем заменить её ещё на что-либо.

В этих случаях, простой поиск уже не сработает. Хотя возможно это выражение можно сократить или как то усовершенствовать.

Небольшое, но важное отступление, если в шаблоне поиска («Найти») встречаются символы схожие с метасимволами, то их нужно экранировать квадратными скобками. Например, в искомом тексте нужно найти именно вот такое сочетание 123*456, то есть в нём есть символ *, тогда в поле «Найти» должно быть 123[*]456. В противном случае, будет искаться сочетание вида 1233456, так как * означает повторитель.

При этом если вы читаете внимательно, то увидите что в примере 5, точка после слова в ред не экранирована, так как в данном частном случае в тексте просто не может быть других вариантов, поэтому это не принципиально будет искаться именно точка или любой другой символ. Если предположить, что в тексте могут быть фразы вроде - в редА Федерального закона и такие фразы нужно не учитывать при поиске, то тогда, точку следовало бы указать явно ^.* в ред[.] Федерального закона .*$.

| – Регулярное выражение, назовем его «альтернатива» -ищет все заданные слова в тексте, предложении. Например нужно найти определенные имена в тесте - Маша и Оля, вечером собирались в кино, но встретив Сашу и Пашу, Маша ушла с Пашей на концерт, а Оля с Сашей решили погулять в парке. Выражение (Маша|Оля) соответственно найдет всех Маш и Оль ;) то есть четыре совпадения.

Как очистить историю «поиска» в Notepad++

Давно пользуюсь «поиском и заменой», и столько же меня раздражала одна маленькая особенность, с которой я мирился, потому что обратная сторона медали, очень удобна.

А именно, то, что редактор ведет историю «поиска и замены», и при следующем поиске – автоматически предлагает ей (историей) воспользоваться , что, безусловно, очень удобно в рамках правки одного документа. Все заготовки как говорится «под рукой», не нужно ничего вводить заново.

Как очистить историю «поиска» в Notepad++ рисунок 2
рисунок 2

Однако не всегда это как говорится плюс, порой после долгой и плодотворной работы, этот список весьма обширен, но уже совершенно не нужен и лишь отвлекает. Раньше я старался не обращать внимания, на эти мелкие неудобства, так как полезность этой функции очевидна. Недавно встретил короткое упоминание, о том, как очистить список истории «поиска и замены», не скажу что этот способ очень быстрый и удобный, но, тем не менее, может быть, кому пригодится.

Итак, начнем:

  1. Закрываем notepad++;
  2. Открываем файл config.xml (%User%\Application Data\Notepad++\config.xml) или как-то так ... ;
  3. Важно: Открывать нужно в любом другом редакторе, но не notepad++, можно в системном блокноте.
  4. Удаляем всё что между тегами <FindHistory></FindHistory> – Рисунок 3.

    Ну или не всё удаляем, нужное можно оставить, там в принципе всё понятно и никаких дополнительных объяснений не требует, – «абра-кадабра» это кириллица первой строки истории, то есть смотрим на рисунок 2 и сравниваем, это одно и тоже. С той лишь разницей, что на рисунке 2 нет окошка заменить. В тегах <Find name="..." /> история того, что искать, а в тегах <Replace name="..." /> история того, на что заменять;

  5. Открываем notepad++ без истории в буфере обмена.
Как очистить историю «поиска» в Notepad++ рисунок 3
рисунок 3