Надефективна обробка тексту

    Не важливо, пишете ви книгу, верстаєте веб-сторінку або редагуєте вихідні коди програм, часом виникає цілий ряд різноманітних рутинних завдань, які забирають багато часу, але обов'язкові до виконання.
 
У цій статті я хочу продемонструвати кілька сценаріїв, які здорово можуть виручити вас в подібних ситуаціях. Приклади буду брати не найскладніші, але показові, на основі яких можна побудувати щось більш хитре.
 
 image
 
 
Думаю, багатьом знайомі ситуації, коли потрібно поміняти формат дат у великому тексті, нормалізувати відступи і прогалини в документі, підрахувати зустрічальність слова в текстовому фрагменті; перетворити xml-документ або відповідь сервера в клас для десеріалізациі, сконвертировать ділянку коду однієї мови програмування в інший… Кожен надходить в подібних випадках по-різному: шукає відповідні утиліти, пише свої, а хтось діє в лоб!
 
Найвідважніші починають освоювати регулярні вирази… А ще сміливіші пробують підстановки. Так, поріг входження у цих інструментів дуже високий, але ефективність при грамотному застосуванні б'є всі рекорди!
 
Одним з факторів, що гальмують вивчення мови регулярних виразів, я вважаю деяку недоробленість існуючих в даній області програм і середовищ розробки.
 
Тому одного разу я вирішив створити свій текстовий редактор з реджексамі і підстановками.
Називається він Poet (сайт: poet.of.by ), і саме за допомогою нього ми будемо сьогодні творити маленькі чудеса!
 
 Підрахунок збігів
 
 
 
Як тільки користувач починає вводити зразок для пошуку, негайно програма підсвічує знайдені збіги і підраховує їх. Більш того за результатами можна переміщатися за допомогою скролл-бару! Спробуйте, іноді це дуже зручно! Така функція мені не зустрічалося в інших програмах.
 
 Багатостроковий пошук з урахуванням спеціальних символів
 
Редактор без праці дозволяє шукати багаторядкові збіги, причому в рядку пошуку завжди ясно видно спеціальні, пробільні і символи перекладу рядка, тому вам не доведеться якимось чином відрізняти таби від прогалин і вважати їх кількість вручну.
 
 
 
 Перетворення дат
 
Включимо використання регулярних виразів і підстановок.
 
 
 
Якщо, наприклад, ми хочемо привести в документі дати формату 01.08.14 до виду 1 серпня 2014, то нам потрібно невелику регулярний вираз і проста підстановка:
 
 
0*(?<Day>\d{1,2}).08.(?<Year>\d{1,2})

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

 
 
 
 
 
 Зміна форматів
 
Якось раз у мене виникла необхідність створювати C # класи з xml-відповіді сервера.
 
<?xml version="1.0" encoding="UTF-8"?>
<Result>
   <Deposit>
      <Synonym>РУБЛИ</Synonym>
      <Curr>BYR - Белорусский рубль</Curr>
      <CurrCode>BYR</CurrCode>
      <State>2 - Продлен</State>
      <Sum>250,000.00</Sum>
      <Rest>88,505,000.00</Rest>
      <PercentSum>4,579,405.00</PercentSum>
      <PercentRest>4,579,405.00</PercentRest>
      <LastPercentDate>22.03.2013</LastPercentDate>
      <CurrentPercent>36.000000</CurrentPercent>
      <PercentSetupDate>18.03.2013</PercentSetupDate>
      <NextPercentDate>22.04.2013</NextPercentDate>
      <NextPercentSumma>2,650,603.00</NextPercentSumma>
      <ContractPost>1170646001265</ContractPost>
      <OpenDate>22.11.2012</OpenDate>
      <ReopenDate>22.03.2013</ReopenDate>
      <FinishDate>22.04.2013</FinishDate>
   </Deposit>
</Result>

 
Це також робиться досить просто:
 
 
<(?<TagName>\w+)>.+</(?<TagName>\w+)>

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

 
 
 
 
 
Зараз моє основне завдання — привернути вашу увагу до застосування регулярних виразів і підстановок а також дати відчути їх міць. Сподіваюся, вас зачепила ця тема!
 
P.S. Елементи мови регулярних виразів , підстановки в регулярних виразах .
    
Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.