Как мгновенно извлечь из текста даты, номера телефонов, емейлы и другие данные

15 регулярок для Sublime на все случаи жизни.

Пятилетний ребенок разберется, как через поисковое окошко найти в тексте комбинацию цифр «1999» или «1800». А вот как найти все комбинации из четырех цифр идущих подряд? Или все номера телефонов? Или фрагменты текста внутри html-тегов?

Для решения подобных задач (и не только их) несколько десятилетий назад были придуманы регулярные выражения (Regular Expression). Это универсальная система описания текстовых строк, которая применяется в разных приложениях и языках программирования.

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

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

1. Годы

[code]
bd{4}b
[/code]

Итак, у нас есть окно редактора, в котором есть исходный текст и регулярное выражение. Нам нужно сделать следующее:

  1. 1. Нажать Command+F;
  2. 2. Сделать активной кнопку .* в левом нижнем углу;
  3. 3. Вставить регулярное выражение в поисковое окошко и нажать на кнопку Find All;
  4. 4. Нажать Command+C;
  5. 5. Нажать Command+N или выбрать нужный документ;
  6. 6. Нажать Command+V и радоваться результату.

В остальных 14 примерах надо делать тоже самое.

2. Годы с 1900 по 2099

[code]
b(19|20)d{2}b
[/code]

3. Ссылки

[code]
(http|ftp|https)://([w_-]+(?:(?:.[w_-]+)+))([w.,@?^=%&:/~+#-]*[[email protected]?^=%&/~+#-])?
[/code]

4. Адреса электронной почты

[code]
b[A-Z0-9._%+-][email protected][A-Z0-9.-]+.[A-Z]{2,}b
[/code]

5. Номера телефонов

[code]
((8|+7)[- ]?)?((?d{3})?[- ]?)?[d- ]{7,10}
[/code]

6. Почтовые индексы

[code]
bd{6}b
[/code]

7. IP-адреса (IPv4)

[code]
(?:[0-9]{1,3}.){3}[0-9]{1,3}
[/code]

8. Содержимое html-тегов

[code]
<h3>(.*?)</h3>
[/code]

9. Значения атрибутов html-тегов

[code]
title=["’]?((?:.(?!["’]?s+(?:S+)=|[>"’]))+.)["’]?
[/code]

10. Имя+Фамилия

[code]
[А-ЯЁ][а-яё]+ [А-ЯЁ][а-яё]+
[/code]

11. Римские цифры

[code]
[MDCLXVI]+
[/code]

12. Широта/Долгота

[code]
-?[0-9]{1,3}(?:.[0-9]{1,10})?
[/code]

13. Время

[code]
([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]
[/code]

14. Даты

В форматах дд/мм/гггг,дд-мм-гггг или дд.мм.гггг.

[code]
(?:(?:31(/|-|.)(?:0?[13578]|1[02]))1|(?:(?:29|30)(/|-|.)(?:0?[1,3-9]|1[0-2])2))(?:(?:1[6-9]|[2-9]d)?d{2})$|^(?:29(/|-|.)0?23(?:(?:(?:1[6-9]|[2-9]d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00))))$|^(?:0?[1-9]|1d|2[0-8])(/|-|.)(?:(?:0?[1-9])|(?:1[0-2]))4(?:(?:1[6-9]|[2-9]d)?d{2})
[/code]

15. Числа с десятичными дробями

С разделителем запятой:
[code]
[-+]?[0-9]*,?[0-9]+
[/code]
С разделителем точкой:
[code]
[-+]?[0-9]*.?[0-9]+
[/code]

Читайте также  Глава Samsung назвал дату презентации Galaxy S9

Альтернативы

Естественно, на Sublime Text свет клином не сошелся и есть и другие текстовые редакторы с поддержкой регулярных выражений. Скорее всего, как минимум, с несколькими из них вы в определенной степени знакомы:

  • Atom;
  • BBEdit;
  • Brief;
  • Elvis;
  • Emacs;
  • BBEdit;
  • Brief;
  • Coda;
  • Elvis;
  • Emacs;
  • Microsoft Word;
  • NEdit;
  • Notepad++;
  • NoteTab;
  • Nvi;
  • PSPad;
  • SubEthaEdit;
  • TextMate;
  • TSE;
  • UltraEdit;
  • Vile;
  • Vim.

Полезные веб-сервисы

На regexr.com можно протестировать регулярные выражения и узнать что обозначают их отдельные синтаксические элементы. Также на этом сайте теоретическая информация по теме.

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

Для тех, кто хочет узнать больше

В статье Мой ТОП-9 книг для программистов я упоминала книгу «Регулярные выражения. Сборник рецептов». В ней можно найти много готовых практических примеров, но она не сделает вас «богом регулярок». Для этого понадобится литература посерьезнее.
Авторитетные люди по всему миру рекомендует для глубокого и тонкого понимания этой темы прочитать ставшую классикой книгу Джеффри Фридла «Регулярные выражения».
Но для начала можно пройти онлайн-курс на regexone:

Источник: iphones.ru

ITC infotech