Войти

Или войди с помощью

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

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

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

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

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

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

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

1. Годы

regular_expression_year
[code]
\b\d{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

years_from_1900

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

3. Ссылки

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

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

emails

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

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

telephone_number

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

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

zip_code
[code]
\b\d{6}\b
[/code]

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

ip_v_4

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

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

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

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

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

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

name_surname

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

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

rim_digits

[code]
[MDCLXVI]+
[/code]

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

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

13. Время

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

14. Даты

data

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

[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?2\3(?:(?:(?:1[6-9]|[2-9]\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00))))$|^(?:0?[1-9]|1\d|2[0-8])(\/|-|\.)(?:(?:0?[1-9])|(?:1[0-2]))\4(?:(?:1[6-9]|[2-9]\d)?\d{2})
[/code]

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

decimal_numbers

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

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

Естественно, на 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.

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

regexp

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

email_extractor

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

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

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

84
undefined
iPhones.ru
15 регулярок для Sublime на все случаи жизни. Пятилетний ребенок разберется, как через поисковое окошко найти в тексте комбинацию цифр «1999» или «1800». А вот как найти все комбинации из четырех цифр идущих подряд? Или все номера телефонов? Или фрагменты текста внутри html-тегов? Для решения подобных задач (и не только их) несколько десятилетий назад были...

Войди и оставь комментарий

Или войди с помощью

<- Назад Забыли пароль? Войти
  1. TVP avatar
    TVP 10 апреля 2016
    3

    Ш-Шта?!

    Букинxем avatar
    Букинxем10 апреля 2016
    0

    @TVP, шта-шта, иди регулярки учи)

    Ирина Чернова avatar
    Ирина Чернова10 апреля 2016
    0

    @TVP, что конкретно Вас смущает?

    TVP avatar
    TVP10 апреля 2016
    2

    @Ирина Чернова, во первых непонятно как это все относится к теме ресурса, а во вторых как уже ранее заметил “metal_king”, в повседневной жизни этот способ не особо применим…

    Ирина Чернова avatar
    Ирина Чернова10 апреля 2016
    0

    @TVP, 1. Чем лайфхаки по работе с текстом на Mac не соответствуют тематике ресурса? 2. А тема использования регулярок в разработке в статье не обсуждается)

    TVP avatar
    TVP10 апреля 2016
    1

    @Ирина Чернова, я вообще изначально оставил подобный комментарий, что бы сказать, что стоит подобные темы как то проще “разжовывать” что-ли… Я даже сам не сразу понял о чем речь…

    Ирина Чернова avatar
    Ирина Чернова10 апреля 2016
    0

    @TVP, так я как раз и постаралась максимально проще. Нужно собрать данные из файлов – выбрал подходящую регулярку, скопировал и используешь)

    TVP avatar
    TVP10 апреля 2016
    1

    @Ирина Чернова, ну деградирую, что поделать)

    Ирина Чернова avatar
    Ирина Чернова10 апреля 2016
    0

    @TVP, так я же вас не упрекаю))) если вам не показалась подача простой, то мне следует задуматься над этим… А как бы Вы видели идеальную подачу такой статьи?

    TVP avatar
    TVP10 апреля 2016
    1

    @Ирина Чернова, кстати, Наталья, а разьясните подалуйста… Что это за рейтинги такие-” свмые активные” и -“самые любимые” как я там оказался, и что за циферки напротив? Модет я через чур ахтивным стал и за мной уже едут?))

    Ирина Чернова avatar
    Ирина Чернова10 апреля 2016
    0

    @TVP, цифра это число комментариев за неделю (пн-воскресенье). А “Наталья” это какое-то турецкое оскорбление?

    TVP avatar
    TVP10 апреля 2016
    1

    @Ирина Чернова, это Хинди) простите, не знаю почему вас Натальей назвал)

    Dexfir avatar
    Dexfir10 апреля 2016
    0

    @TVP, Серега, че с тобой?))))))))

    dennis1 avatar
    dennis110 апреля 2016
    0

    @Ирина Чернова, а хотелось бы увидеть еще рейтинг самых забаненых, так сказать самые сливки, а не только лишь отсталых)

    Артур Малосиев avatar
    Артур Малосиев10 апреля 2016
    0

    @TVP, поддерживаю;)

    lonz avatar
    lonz10 апреля 2016
    1

    @Ирина Чернова, зашёл почитать про айфоны

    Ирина Чернова avatar
    Ирина Чернова10 апреля 2016
    0

    @lonz, ну так статья для пользователей OS X и iOS. Поставьте на свой iPhone TextWrape и используйте для поиска текста регулярки в нем)

    lonz avatar
    lonz10 апреля 2016
    0

    @Ирина Чернова, не представляю, если бы я зашёл, например, на Engadget, даже и не в раздел мобайл, и почитал бы там про “регулярки”. Но понятно почему так делаете, конечно. Жаль.

    Ирина Чернова avatar
    Ирина Чернова10 апреля 2016
    0

    @lonz, статья не про регулярки, а про решение проблемы извлечения данных из текста.

    Войди на сайт, чтобы ответить
    Ответить
  2. metal_king avatar
    metal_king 10 апреля 2016
    0

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

    Ирина Чернова avatar
    Ирина Чернова10 апреля 2016
    0

    @metal_king, тема ~реальной жизни~ в статье не затрагивается))) И не надо заводить разговор ~про это~:-) А то сейчас начнется аля ~хабросрач~, как это часто бывает)
    Но за высказанное мнение большое спасибо)

    Войди на сайт, чтобы ответить
    Ответить
Помни о правилах — если начал оффтопить, то не удивляйся потом.

Нашли орфографическую ошибку в новости?

Выделите ее мышью и нажмите Ctrl+Enter.