Skip to content

Latest commit

 

History

History
146 lines (70 loc) · 6.83 KB

practicum-regex1.md

File metadata and controls

146 lines (70 loc) · 6.83 KB

Продвинутый текстовый редактор для лингвиста

Конвертация кодировок. Поиск и замена. Регулярные выражения.

Что понадобится: NotePad++. Владельцы Mac-ов используют аналоги: редакторы TextWrangler (BBedit) или Fraise. Все дальнейшие примеры иллюстрируют использование NotePad++.

Кодировки

Типы кодировок текста для русского языка:

  • DOS, KOI8-R, Cyrillic Windows cp1251, Unicode (UTF-8 с/без BOM, цифровой подписи)

В меню "Кодировки" можно заменить текущую на Windows-1251, затем обратно на UTF-8 без BOM.

Если в открываемом файле видны "кракозябры", то с помощью меню "Кодировки" можно подобрать правильную.

"Преобразовать в...": переводит файл в другую кодировку (затем файл нужно сохранить). Windows-1251 называется ANSI.

Отображение скрытых символов

  • Меню: Вид → Отображение символов
  • далее чекбоксы: Отображать пробелы и табуляции, отображать символы конца строки, отображать все символы.

Формат конца строки

Непечатаемые символы, обозначающие конец строки:

Win-формат: CR+LF \r\n

old-Mac-формат: CR \r

UNIX-формат: LF \n

В режиме отображения символов конца строки вы увидите "СR", "LF", которые при поиске и замене в расширенном режиме и в режиме регулярных выражений задаются как эскейп-символы \r, \n, соответственно.

Режим автоматического переноса строк

  • Меню: Вид → Перенос строк
    автоматически переносит текст на новую строку, как в Word. Видимые концы строк при этом не сохраняются (являются "мягкими").

Поиск и замена в расширенном режиме

Табуляция: экскейп-символ \t

Пример: Заменим 5 пробелов в начале строки на знак табуляции.

Найти: ˽˽˽˽˽ (5 пробелов)

Заменить: \t Режим поиска: расширенный

Пример: Заменим концы строк на пробел

Найти: \r\n Заменить: ˽ (1 пробел). Режим поиска: расширенный

Режим поиска "Регулярные выражения"

^ - начало строки, $ - конец строки

к[аоиу]т - найдет кат, кот, кит, кут

[а-яё] - найдет все буквы русского алфавита

[0-9a-z@_.] - все знаки, допустимые в адресе электронной почты

Пример: Узнаем, есть ли в тексте латинские буквы...

[^а-я] - "крышка" обозначает НЕ (в данном случае, ищем любой символ кроме букв русского алфавита от а до я)

[^!]$- найдет концы абзацев, не заканчивающиеся на восклицательный знак

. - любой символ

.+ - повтор (любого символа) 1 или более раз

.* - повтор (любого символа) 0 или более раз

е+ - найдет е, ее, еее...

[нм]+ - найдет сочетания нн, мм, нм, мн, ммм, нннн, мнннннм...

л.+ - найдет букву л и далее все символы до конца строки

л[а-яё]+ - что найдется здесь?

˽я[а-яё]* - (в начале пробел) найдет слова, начинающиеся с я, в том числе слово я

Этот поиск "жадный" - он будет искать строку максимальной длины, соответствующую условию в "Искать".

Запрос <.*> в строке <p>что-то здесь</p> найдет всю строку целиком: <p>что-то здесь</p>

Нежадный ("ленивый") поиск:

.+?

.*?

-- ищет до первого вхождения символа, указанного после ?

<.*?> - найдет тег <p>, затем тег <p>: <p>что-то здесь</p>

ч.+о - найдет "что-то"

ч.+?о - найдет "что"

Примеры: Найдем "лишние" пробелы в тексте и удалим их.
Найдем с помощью "ленивого поиска" последовательность букв от пробела до пробела (слово).

Регулярные выражения: эскейп-символы

\. - ищет точку

\\ - ищет обратный слэш

\+, \*, \[, \], \( - ищет плюс, звездочку, знаки скобок и т.п.

Пример: Найдем все концы абзацев, заканчивающиеся на точку.

Использование условий поиска

Заключим все условие или его части в скобки. В поле "Заменить"

\1, \2, \3 - обозначает части поиска

([^ -])- ([^ -])\1\2 - уберет дефисы, оставшиеся после удаления жестких концов строк.

Пример: Как задать маску поиска конца прямой речи?

Предупреждение: язык регулярных выражений может немного различаться в разных редакторах и в разных языках программирования (нотацией), но в целом набор приемов и принципы поиска одинаковы.

Так, в NotePad++ версий ранее 6.0 нет: {20,40} (повтор от 20 до 40 раз), вместо \0 (все найденное по маске поиска) использовать $0.

Еще один краткий курс по регулярным выражениям в NotePad++