Сверхэффективная обработка текста

Не важно, пишете ли вы книгу, верстаете веб-страницу или редактируете исходные коды программ, порой возникает целый ряд разнообразных рутинных задач, которые отнимают много времени, но обязательны к выполнению.В этой статье я хочу продемонстрировать несколько сценариев, которые здорово могут выручить вас в подобных ситуациях. Примеры буду брать не самые сложные, но показательные, на основе которых можно построить что-то более хитрое.

image

Думаю, многим знакомы ситуации, когда нужно поменять формат дат в большом тексте, нормализовать отступы и пробелы в документе, подсчитать встречаемость слова в текстовом фрагменте; преобразовать xml-документ или ответ сервера в класс для десериализации, сконвертировать участок кода одного языка программирования в другой… Каждый поступает в подобных случаях по-разному: ищет соответствующие утилиты, пишет свои, а кто-то действует в лоб!

Самые отважные начинают осваивать регулярные выражения… А ещё более смелые пробуют подстановки. Да, порог вхождения у этих инструментов очень высокий, но эффективность при грамотном применении бьёт все рекорды!

Одним из факторов, тормозящих изучение языка регулярных выражений, я считаю некоторую недоработанность существующих в данной области программ и сред разработки.

Поэтому однажды я решил создать свой текстовый редактор с реджексами и подстановками.Называется он Poet (сайт: poet.of.by), и именно с помощью него мы будем сегодня творить маленькие чудеса!

Подсчёт совпадений

0c987704b68944dd96e0b0e3c68e582a.png

Как только пользователь начинает вводить образец для поиска, тотчас программа подсвечивает найденные совпадения и подсчитывает их. Более того по результатам можно перемещаться с помощью скролл-бара! Попробуйте, иногда это очень удобно! Такая функция мне не встречалось в других программах.

Многострочный поиск с учётом специальных символов

Редактор без труда позволяет искать многострочные совпадения, причём в строке поиска всегда ясно видно специальные, пробельные и символы перевода строки, поэтому вам не придётся каким-то образом отличать табы от пробелов и считать их количество вручную.

0a903b37d94346699c05935233018db4.png

Преобразование дат

Включим использование регулярных выражений и подстановок.

f0fbcde92e814beb9e6c7794151606fd.png

Если, к примеру, мы хотим привести в документе даты формата 01.08.14 к виду 1 августа 2014, то нам потребуется небольшое регулярное выражение и простая подстановка:

0*(? \d{1,2}).08.(? \d{1,2})

${Day} августа 20${Year}

90ce1046554f43f9b09eca712f879cd3.png

271503343f0b4936bef18a2ffdf76f12.png

Смена форматов

Как-то раз у меня возникла необходимость создавать C# классы по xml-ответу сервера.

РУБЛИ BYR — Белорусский рубль BYR 2 — Продлен 250,000.00 88,505,000.00 4,579,405.00 4,579,405.00 22.03.2013 36.000000 18.03.2013 22.04.2013 2,650,603.00 1170646001265 22.11.2012 22.03.2013 22.04.2013 Это также делается довольно просто:

<(?\w+)>.+\w+)>

[XmlElement (»${TagName}»)] public string ${TagName} { get; set; }

7d951cde8e294c89875243ebd986ec71.png

b17a7cc157c9418ca0975a68fadb4573.png

Сейчас моя основная задача — привлечь ваше внимание к применению регулярных выражений и подстановок, а также дать почувствовать их мощь. Надеюсь, вас зацепила эта тема!

P.S. Элементы языка регулярных выражений, подстановки в регулярных выражениях.

© Habrahabr.ru