Войти

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

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

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

84 комментариев

Котик
Котик
Котик
Котик
Котик
Котик
Котик
Котик
Котик
Котик
Котик
Котик
Котик из TikTok
Котик из TikTok
Котик из TikTok
Котик из TikTok
Момент из фильма
Момент из фильма
Момент из фильма
Момент из фильма
Момент из фильма
Момент из фильма
Момент из фильма
Момент из фильма
Момент из фильма
Момент из фильма
Момент из фильма
Момент из фильма
Момент из фильма
Момент из фильма
Момент из фильма
Момент из фильма
Момент из фильма
Момент из фильма
Мем стикер
Мем стикер
Мем стикер
Мем стикер
Мем стикер
Мем стикер
Мем стикер
Мем стикер
Мем стикер
Мем стикер
Мем стикер
Мем стикер
Мем стикер
Мем стикер
Мем стикер
Мем стикер
Мем стикер
Мем стикер
Мем стикер
Мем стикер
Мем стикер
Мем стикер
Мем стикер
Мем стикер
Мем стикер
Мем стикер
Мем стикер
Мем стикер
Мем стикер
Мем стикер
Мем стикер
Мем стикер
Мем стикер
Офис стикер
Офис стикер
Офис стикер
Офис стикер
Офис стикер
Офис стикер
Офис стикер
Офис стикер
Офис стикер
Офис стикер
Офис стикер
Офис стикер
Офис стикер
Офис стикер
Офис стикер
Офис стикер
Офис стикер
Видео мем
Видео мем
Видео мем
Видео мем
Видео мем
Видео мем

Какие правила в комментариях
  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.