Регулярные выражения в Notepad++ делают работу с текстом на порядок легче и быстрее. В статье на конкретной задаче покажу пару реальных примеров, которые может взять за основу каждый. На самом деле всё легче, чем может показаться.
Регулярные выражения
Я не буду разъяснять основы этого понятия, материалов в Сети более чем достаточно и любой желающий может самостоятельно вбить в поисковик эту фразу - «Регулярные выражения».
Мне кажется, что для не программиста это несколько сложновато. Поэтому всё простым языком, чтобы было понятно всем. При этом, надеюсь, ясно, что статья предназначена не для специалистов.
Итак, регулярное выражение - это некий шаблон, по которому осуществляется поиск текста. В таком шаблоне задаются определённые условия, которым должна удовлетворять искомая строка. И возможности тут поистине безграничны.
Далее всё конкретно применительно к Notepad++.
Например, нам нужно найти все даты. Давайте попробуем просто словами определить набор условий для этой цели. Как должна выглядеть дата:
- Начинаться с числа - одна или две цифры.
- Затем либо тире, либо точка.
- Затем месяц - одна или две цифры.
- Опять либо тире, либо точка.
- Год - от двух до четырёх цифр.
В обычном поиске такое сделать невозможно. А вот при помощи регулярных выражений - запросто. И выглядеть такое выражение будет вот так:
\d{1,2}+(-|\.)+\d{1,2}+(-|\.)+\d{2,4}
Испугались? Не стоит. Просто можете брать и использовать. Такое регулярное выражение найдёт вот такую дату: 28.09.2016, и вот такую: 5-10-2016, и даже такую: 02-12.56.
Как это всё делать на практике покажу ниже на своей реальной задаче. Там, кстати, использовались другие регулярные выражения.
Для чего мне понадобились регулярные выражения в NotePad++
Кому не терпится быстрее посмотреть практическое применение регулярных выражений в NotePad++, тот может этот раздел пропустить. Для остальных я расскажу как я докатился до жизни такой...
Сравните эти два скрина, которые я сделал с записи видеорегистратора.
Оригинальные субтитры Субтитры после обработкиСлева - оригинал, справа - после моей обработки.
Видеорегистратор создаёт файл субтитров, который и содержит данные, выводимые в видео. Но данные эти для меня избыточны. Мне не нужны координаты и высота над уровнем моря. В идеале только скорость, дата и время.
В оригинале файл выглядел так:
1 00:00:00,000 --> 00:00:01,000 58 km/h 28.09.2016 08:22:09 866 m lat: 43.21206 lon: 76.91992 2 00:00:01,000 --> 00:00:02,000 60 km/h 28.09.2016 08:22:10 866 m lat: 43.21195 lon: 76.91977 3 00:00:02,000 --> 00:00:03,000 60 km/h 28.09.2016 08:22:11 866 m lat: 43.21185 lon: 76.91963
Причём здесь я показал только три блока из файла субтитров, но их-то на самом деле может быть несколько сотен, в зависимости от длительности видео. Тем не менее, я решил убрать лишнюю информацию из файла. Для этого, как вы уже догадались, мне нужно было в каждом блоке удалить то, что на картинке обведено красной рамкой.
Конечно же вручную лопатить сотню-другую строковых блоков и убирать лишнее просто нереально.
Но вот тут, как раз и пришли на помощь регулярные выражения.
Применение регулярных выражений в NotePad++
Итак, задача № 1 - найти все строки, начинающиеся с «lat:». Для этого используем вот такое регулярное выражение: ^lat:(.*)
Краткий разбор: символ ^ означает начало строки. После этого символа пишем то, с чего должна наша строка начинаться, в моём случае это lat:, в вашем может быть что угодно. И завершаем комбинацией (.*), которая означает что после lat: может быть любое количество любых символов.
Чтобы не заморачиваться в выражение ^lat:(.*)
просто вместо «lat:» подставьте своё значение.
Задача № 2 - найти те части строк, которые содержат 3 или 4 цифры и после них буковку «m».
Для этого используем вот такое регулярное выражение: [0-9]{3,}(.m)
Краткий разбор: [0-9] указывает на то, что тут должны быть только цифры. {3,} - определяет количество цифр, некий диапазон. В данном случае я указал минимальное значение - 3. Если после запятой поставить, например 5, то {3,5} укажет что цифр должно быть минимум 3 и максимум 5. Т.е. от трёх до пяти. В данном случае я после запятой ничего не указывал и в моём примере правило звучит как от трёх и до бесконечности... Ну и (.m) означает, что в конце искомой комбинации должна стоять буковка «m».
Вот и всё, что мне требовалось для решения проблемы. А теперь заветный Ctrl+F в NotePad++.
Главное в NotePad++ не забыть выставить нужную галочку, чтобы поиск происходил по регулярным выражениям.
Готовы? Поехали!
Небольшое, меньше 3-х минут, видео, которое демонстрирует использование регулярных выражений в NotePad++ на практике. Видео специально снимал с расстановкой, так сказать, чтобы были понятны действия. В реальности всё это заняло бы меньше 30 секунд.
Заключение
Данная статья не является каким-либо пособием по изучению регулярных выражений. Для тех, кто знаком с этим понятием - она будет бесполезна. А вот для большинства читателей - просто шанс попробовать этот инструмент, копируя практически готовые шаблоны без необходимости глубоко вникать в суть происходящего.
На приведённой маленькой задаче вы убедились какие возможности дают нам регулярные выражения при работе в NotePad++. Если данная тема кого-то заинтересовала, то вы можете воспользоваться поиском и получить самую исчерпывающую информацию о регулярных выражениях и их применении.
Я же просто покажу ещё парочку востребованных регулярок:
[\.\-_A-Za-z0-9]+?@[\.\-A-Za-z0-9]+?[\ .A-Za-z0-9]{2,}
- найдёт все email.
(?:8|\+7)?.?\(?(\d{3})\)?.?(\d{3})[ -]?(\d{2})[ -]?(\d{2})
- найдёт номера мобильных телефонов.
Поиск дат показывал в самом начале статьи, а ниже неудавшийся шедевр, который по моему замыслу должен бы искать текст между тегами, что он почему-то не делает, зато ищет все двойные буквы и цифры... Вот он:
(?<h1>\w)\k<h1>
- не стал разбираться, оставил как есть - эффект уж больно интересный. Поиграйтесь... А с поиском текста между тегами разберусь, как возникнет необходимость...
Надеюсь, что материал будет для вас полезным и вы сможете, используя регулярные выражения в NotePad++, сделать свою работу более комфортной.
Удачи!
Саша, привет! Я с этими регулярками уже запарился. В программе их только и пишешь, для парсинга текста или ссылок. Так что мне без них никуда. Хорошо что там есть конструктор, который помогает их составлять и тестировать. Иначе было бы туго. А вот на счет Notepada, если честно то не знал. Так что спасибо за очередную порцию обучения.
Привет, Андрей! Я с регулярными выражениями сталкиваюсь при написании программ и php-кодинга. Но вот так навскидку их не помню, конечно. Какие-то шаблоны лежат в загашниках… При необходимости лезу в справочники и разбираюсь заново – память освежаю. В NotePad++ тоже попробовал впервые – удобно, понравилось.
Тоже использую Notepad++, но без регулярных выражений.Теперь буду знать, что в случае серьезной задачи работу можно сильно упростить. Файлы обрабатываю большие (в формате CSV), использую самописные макросы для Notepad++, но самые примитивные – например, найти товар с нулевой ценой и удалить строку или заменить спецсимвол (который не "нравится" Престашопу) на другой символ. Пытался зацикливать подобные обработки, но ничего хорошего из этого не вышло – не хватает терпения и мозгов ))
CSV я тоже использую для выгрузки товаров из нашей базы в OpenCart. Но я у себя в программе написал функцию и CSV создаётся автоматом. Править там уже ничего не надо. Но если уж что-то редактировать, то удобнее наверное в Calc от LibreOficce – открывает как таблицу, каждое поле – столбец. По сути файл Excel, хотя на деле обычный текстовый формат. И наглядно и удобно.
А насчёт NotePad++ тоже как-то не использовал регулярные выражения. Но оказывается это действительно сильно упрощает многие задачи… А вот макросы там вообще не использую – наверное просто необходимости не возникало, вот и не разбирался с этим.
Привет, Саша!
Понравилось применение регулярных выражений в регистраторе. Собираюсь приобрести регистратор и думаю, твои подсказки очень пригодятся. В Notepad++ не использую, честно говоря, раньше и не знал о таких выражениях. Пока не представляю, какую пользу могут принести мне гег.выр. в работе по редизайну.
Миша, приветствую! Насчёт регистратора… Настоящий регистратор пишет файл без субтитров и сразу встраивает данные в видео. Но я так и не выбрал себе регистратор, поэтому использую приложение на своём андроиде – DailyRoads. Вот это приложение и создаёт файл с субтитрами. Там есть возможность выгрузить видео на сервис и конвертировав забрать обратно с уже встроенными в это видео данными. Причём шаблон, где и что вставлять ты настраиваешь сам. Но это занимает какое-то время и нужно, я думаю, далеко не каждый день. А я в данном случае, просто скачал видео с сотки и поигрался с файлом субтитров.
Зато теперь знаешь, а польза будет, когда возникнет необходимость подобные регулярки использовать. А что редизайн? Ты же там по сути те же текстовые файлы и правишь. Будет нужда найти какие-либо заумные вхождения в текст – вспомнишь о регулярках…
Саш, я когда-то настраивал авто-вход в почтовые ящики и там менял, удалял и добавлял вот такие выражения:
{USERNAME}{TAB}{TAB}{PASSWORD}{ENTER}
Это и есть регулярные выражения или что-то другое?
Нет, Миш, это не то. Ты показываешь так называемую ESC-последовательность. Проще говоря комбинацию вставки данных и нажатий клавиш.
Регулярные выражения – это совсем другая песня.
Коротко и ясно! Понял, спасибо!
Ну вот у меня в KeePass такая-же фигня работает:
Именно про него я и говорил, только вместо автонабор, сказал авто-вход.
Только с такой настройкой по умолчанию ты в mail.ru не войдёшь автонабором, нужно ещё один {TAB} добавить
У меня там на каждую группу свои наборы, а на некоторые записи вообще отдельно прописано. Есть и очень специфичные последовательности…
Вроде всё понятно разъяснено. Только на практике это всё равно не смогу применить, даже не представляю где. Но это скорее всего, потому что не разбираюсь во всяких кодировках.
Валентина, ну почему-же не сможете? Специально ведь старался преподнести так, чтобы в коды вникать было не нужно. КопиПаст же никто не отменял. А куда что вставлять в видео показано.
Александр, добрый день
Скажу сразу честно, для меня это очень серьёзно и трудно. Суть, конечно, поняла, но вот куда применить это?
Пыталась вбить в поисковике предложенные ряды выдал полную ерунду…. Что-то видно не так делаю…
Ладно, рада, что другим это понятно и нужно.
А как концерт прошёл, какие впечатления от хора Турецкого?
Люда, привет!
А поисковик-то тут при чём? Ты видео смотрела? Есть такой текстовый редактор – NotePad++, им пользуются практически все, кто работает с сайтами… Вот в нём открыть текстовый файл с кучей какого-то текста, кода и т.д. И осуществить поиск – клавиши Ctrl+F… Ну в видео вроде всё показал…
А в поисковике надо вбивать фразу "регулярные выражения"…
Хор Турецкого. Конечно ходил. Остался в восторге. В конце второго отделения они вообще пригласили желающих на сцену и устроили 4-х минутную дискотеку.
Вот на сотку снял этот момент.
Саша, привет
Кто создаёт сайты хотел сказать? Значит не для меня, я сразу поняла это 🙂 Видео не смотрела…
По поводу хора.. я их слушала ещё в 90-ых в конце, тогда они не были столь известны, но уже тогда резко выделялись своей манерой исполнения. Бывают в Анапе каждый сезон, а мы всё не выберемся… Вы молодцы! Считаю их исполнение можно причислить к высокому искусству. И дискотека классная похоже вышла.
Саша, а зал не тот самый дворец им. Ленина, что был у подъёмника на Кок Тюбе? Что то напомнило вдруг его… Хотя, видимо, теперь в Алматы полно новых подобных залов.
Спасибо
Люд, ты Блокнотом пользуешься? Неужели никогда не редактируешь простые текстовые файлы?
Вот вместо Блокнота установи NotePad++ – он бесплатный, но лучшего текстового редактора не встречал.
Насчёт зала ты совершенно права! Только теперь он называется не "Дворец Ленина", а "Дворец Республики".
Я считаю их творчество действительно высоким искусством. Голоса, репертуар, спевка, артистизм – всё на самом высшем уровне. А дискотека… ну это вроде как заготовка у них такая, по крайней мере Турецкий говорил, что и в Москве, и в Питере, и в других городах они такое делали… А у нас – пели они песню и вдруг на сцену выскочила девушка из зала и давай отплясывать под эту песню. Через пару секунд ещё две выскочили. Ребята из хора их там тепло приняли, подплясывали им и т.д. После этого, когда исполнение закончилось, Турецкий и предложил всем желающим…
Редко очень Блокнот использую, в основном всё в Ворд, там больше функционал… привыкла к нему.
Я поняла тебя, но ведь я с форматами типа html или php не работаю. Всё как-то не приступлю к познанию внутреннего строения вордпресс. Как то всё обходится…
Для меня тема новая. Сложно, но интересно)))
Вот так, с ходу, применить не смогу.
Но "в корочке" отложилось, что есть вот такая возможность.
Александр, спасибо!
На самом деле всё проще, чем кажется…
Даже кикогда бы и не побумал, что простой блогнот – настолько мощное средство.
Очень мощное, на самом деле. А если его ущё плагинами равными усилить, так вообще супер.
Саша, иногда мне приходилось многое… И так хочется сказать: Где ж ты раньше был, когда я маялась… С муз и видео файлами не было особой работы у меня, а вот кое что приходилось искать. Но я знала Ctrl+F, а вот про регулярные выражения услышала от тебя впервые. Возможно и пригодится. С Нотпадом я работала, когда искала внешние ссылки на шаблонах. Но там так хитро прописаны эти внешние, они ведь не в одном файле… нужно знать иерархию, а мне вникать было некогда, отпускала эти шаблоны, искала следующие.
Зато очень хорошо научилась: Вставляла текст со всеми картинками, предварительно сделав на сайте Ctrl+U и переносила в Нотпад. Таким способом я многое усвоила по HTML. Возможно пригодятся регулярные выражения, спасибо тебе за статью. Раздала твою статью по социалкам, только почему у тебя нет кнопки ВКонтакте)
Надежда, существует множество ситуаций когда такой подход может пригодиться и существенно облегчить выполнение задачи.
А я не ставил никаких приблуд для социалок – использую то, что встроено в сам шаблон. А там Vk отсутствует. Только буржуйские сервисы. Я бы ручками вставил в шаблон и наши, но поскольку регулярно его обновляю, то стараюсь в коды не лезть вообще.
Спасибо, что поделилась!
Саша… Я совсем забыла, что у тебя буржуйский шаблон. Ну да, как обновление, так и вставляй по новой. Ладно, без ВК можно, кому надо тот найдет – мое мнение. Всегда пожалуйста!!! Пусть все узнают полезное. Вдруг кто – то в этот момент ищет подсказки по Нотпаду, а тут я…. поделилась. бог не любит жадных)))
Ты знаешь, не проблема отключить встроенные в шаблон соцсети и навесить другие хоть плагином, хоть кодом… Но я подумал примерно так-же как и ты – кому надо, найдёт как поделиться в Вк… А добавлять что-то если есть почти то-же встроенное посчитал излишним…
Хотя и такое у меня есть. Например вывод связанных записей. У меня и плагин мой установлен, и шаблоном выводится. Смотрится практически одинаково. Вот "Возможно Вас заинтересует" – это мой плагин выводит, а "Похожие записи" – шаблон. Одно настроеил по тегам, другое по категориям. Иногда пересекаются, иногда разные посты показывают. Но не могу-же я убрать свой плагин, раз сам его разработчик… В первую очередь я на своём блоге и должен демонстрировать его работу.
Но это исключение, конечно…
Здравствуйте Александр. У меня такая проблемка, как из исходного материала
27.12.16 MOL МАК Будапешт Брашов 3 : 4
(3 : 3)
13.10.16 MOL Брашов МАК Будапешт 2 : 1
07.10.16 MOL МАК Будапешт Брашов 0 : 1
(0 : 0)
01.02.16 MOL МАК Будапешт Брашов 4 : 1
14.01.16 MOL Брашов МАК Будапешт 0 : 4
получить вот такое
27.12.16 MOL МАК Будапешт Брашов 3 3
13.10.16 MOL Брашов МАК Будапешт 2 1
07.10.16 MOL МАК Будапешт Брашов 0 0
01.02.16 MOL МАК Будапешт Брашов 4 1
14.01.16 MOL Брашов МАК Будапешт 0 4
одним действием. Заранее благодарю….
Александр, не подскажу. Одним действием не знаю как это сделать. Можно одним действием убрать двоеточие между всеми цифрами, тут даже регулярные выражения не нужны. Просто поиск двоеточия и замена либо на пробел, либо на пустое значение. Заменить всё – это и будет одно действие. Но вот как значения в скобках подставить вместо значений в предыдущей строке – не знаю…
Спасибо Александр…… будем искать….
Я есть такое, чтоб с кода вк или сайта выкачивать ай ди или емейлы?
Честно скажу: не знаю. таким вопросом я не задавался. Для начала бы код увидеть. А ещё в Сети поискать – должны быть парсеры для таких целей.
Не подскажите регулярное выражение для notepad ++. Есть html документ и нужно с него вытянуть только ссылки. Возможно так сделать?
Заранее спасибо.
Здравствуйте, Андрей!
Попробуйте что-то типа такого:
Александр, спасибо!