Для чего нужны регулярные выражения
Перейти к содержимому

Для чего нужны регулярные выражения

  • автор:

Регулярные выражения

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

Наше недавнее исследование вакансий показало: знание регулярных выражений и навык работы с ними требуется в 24% вакансий продуктовых компаний для фронтенд-разработчиков с опытом больше двух лет.

Давайте разберёмся, что такое регулярные выражения и как грамотно их применять.

Зачем нужны регулярные выражения

Регулярные выражения — это формальный язык поиска подстроки в строке. Они поддерживаются многими программами: редакторами, системными утилитами, базами данных. Но особенно хорошо возможности этого инструмента раскрываются в языках программирования, в том числе в JavaScript.

Рассмотрим простой пример, чтобы понять, зачем нужны регулярные выражения. Допустим, перед нами стоит задача — найти и заменить местоимение ее на его в строке Быстрее всего мы догоним ее на машине .

Самое очевидное решение — использовать прямую замену, применив встроенную в JavaScript функцию:

'Быстрее всего мы догоним ее на машине'.replace('ее', 'его'); 

Однако мы получим ожидаемо неверный результат: ее является также окончанием слова Быстрее , а .replace() заменит первое вхождение подстроки. Поэтому необходимо проверить строку на наличие символа, стоящего перед ее : если это пробел, можно делать замену.

В задаче могут возникнуть и другие условия. Например, мы не знаем, в каком регистре написаны слова ( ее , Ее , ЕЕ ) и используется ли буква ё . Если добавить их в функцию, она станет слишком большой и сложной. Это может привести к другим ошибкам.

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

�� Чтобы углубиться в тему, пройдите курс «Регулярные выражения для фронтенда». Он научит вас составлять регулярные выражения, чтобы писать меньше кода и работать быстрее.

Когда можно использовать регулярные выражения

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

  • Поиск или замена подстроки в строке с «плавающими» (неизвестными) данными. Самая распространённая задача — найти в тексте ссылки и адреса электронной почты и сделать их кликабельными.
  • Валидация данных формы и ограничение ввода. Например, валидация номера телефона, электронной почты, данных паспорта гражданина РФ и другой информации.
  • Получение части строки или формирование новых структур данных из строк. Например, нужно найти количество вхождений ключевых слов в тексте без учёта падежных окончаний, составить из них массив с данными для дальнейшего использования.

Чаще всего фронтенд-разработчики встречаются с регулярными выражениями в задачах, связанных с валидацией данных. И обычно такие задачи решаются поиском нужного выражения в интернете и вставкой готового выражения в проект — по крайней мере, у начинающих специалистов.

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

Когда нет смысла применять регулярные выражения

В некоторых случаях этот инструмент усложняет реализацию или время выполнения кода. Вам не нужны регулярные выражения, если стандартные функции JavaScript справляются с задачей сами. Вот ещё пара ситуаций:

  • Структура содержимого данных хорошо описана, легко поддаётся разбору, и можно применить нативные методы работы со строкой.
  • Предполагается работа с тегами, правка атрибутов или содержимого.

Разумеется, это общие примеры, и научиться подбирать правильное решение можно только с опытом. Главное, чтобы оно позволяло тратить на задачу меньше ресурсов и повышало производительность.

Как регулярные выражения могут помочь с задачами, которые не касаются написания кода напрямую

Регулярные выражения могут облегчить работу фронтендеру не только при работе с кодом, но и при его написании.

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

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

Какие типовые задачи решаются регулярными выражениями:

  • Поиск и гибкая замена в коде.
  • Подготовка и обработка данных. Когда вы выносите предварительные данные в текстовый редактор и готовите их для следующих операций.
  • Написание кода с большим количеством одинаковых конструкций.

Регулярные выражения вне фронтенда

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

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

Выводы

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

Больше статей

  • HTML-шаблонизаторы
  • Что такое и зачем нужны алгоритмы
  • Что такое CMS и как под них верстать

«Доктайп» — журнал о фронтенде. Читайте, слушайте и учитесь с нами.

Что такое регулярные выражения

Получи нашу книгу «Контент-маркетинг в социальных сетях: Как засесть в голову подписчиков и влюбить их в свой бренд».

Подпишись на рассылку и получи книгу в подарок!


Регулярные выражения — это инструмент сравнения некоторой строки с заданным шаблоном.

Больше видео на нашем канале — изучайте интернет-маркетинг с SEMANTICA

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

Регулярки можно сравнить с азбукой Морзе. В ней буквы алфавита, цифры заменяются комбинациями точек и тире. Разница в том, что в случае с азбукой набору точек и тире может соответствовать только один набор символов. Регулярные выражения же показывают, какой вид может принимать строка. Другими словами, они формируют шаблон, которому должен соответствовать набор символов.

Что такое регулярные выражения простыми словами

Регулярные выражения — это своеобразный фильтр для текстовых данных. Например, нужно найти все doc-файлы на съемной носителе. Вручную искать долго и непродуктивно. Достаточно в поисковой строке ввести текст «*.doc», и система отберет все файлы с любым именем формата .doc. На будущее, символ «*» означает последовательность любых символов произвольной длины.

Механизм регулярных выражений был разработан в 1997 году создателями языка программирования С. Изначально регулярки были реализованы в библиотеке PCRE языка Perl. Но механизм оказался настолько удобным и полезным, что впоследствии эта библиотека стала использоваться в других языках — Java, JavaScript, PHP, C++ и т. д.
Упрощенная библиотека PCRE была введена в систему Google Analytics. Она не требует больших вычислительных мощностей, проста в освоении и использовании.

Где могут использоваться регулярные выражения

Они могут использоваться везде, где необходима фильтрация текстового типа данных. Часто они используются при разработке парсеров строк — синтаксических анализаторов.
Функционал для работы с регулярными выражениями есть в редакторе таблиц Excel, текстовых редакторах. При оптимизации сайтов применяется KeyCollector — программа для составления семантического ядра. Если требуется отобрать много ключей определенного шаблона, используются регулярные выражения.

Регулярки применяются и в сфере интернет-маркетинга. Аналитикам иногда нужно настраивать вид отчетов, фильтровать для них текстовые данные. Инструменты аналитики — Яндекс.Метрика и Google Analytics — позволяют пользоваться регулярными выражениями:

  • для настройки целей;
  • для фильтрации текстовой информации в отчетах — например, об источниках трафика;
  • при работе с тегами в Google Tag Manager;
  • для работы с фильтрами представлений — разделение источников трафика на сегменты.

Как пользоваться регулярными выражениями

Регулярные выражения строятся по определенным правилам. Символы могут быть обычными — буквы, цифры, могут быть специальными — метасимволами, которые используются для задания шаблона строки.

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

Символ звездочка “ * ”

Этот символ используется, когда необходимо указать произвольное число повторений предшествующего символа.
Пример: tr*ack — маска. Под нее подойдет набор символов tack — символа r нет; подойдет track — одно вхождение символа; подойдет trrrrrack — несколько вхождений символа, стоящего перед звездочкой.

Символ вопросительный знак “ ? ”

Метасимвол так же, как и звездочка, указывает на предстоящий символ. Вопросительный знак указывает, что литера может либо отсутствовать, либо присутствовать в строке.
Пример: под маску tr?ack подходит два варианта. tack — отсутствие символа, track — одно вхождение.

Символ плюс “+”

Этот спецсимвол означает, что предыдущий символ может повторяться неограниченное число раз.
Пример: под маску tr+ack подойдут так же track, trrack, trrrack и т. д.

Символ точка “ . “

Точкой обозначается один произвольный символ.
Пример: к строке tr.ack подойдут наборы tr1ack, trRack, tr7ack и т. д.

Символ крышка “ ^ ”

Данный метасимвол означает, что следующий за ним набор символов должен находиться в начале строки.
Пример: шаблону ^track будут удовлетворять строки track, track10, но строки вида 10track, rtrack.

Символ доллар “ $ ”

Метасимвол указывает на то, что предшествующие ему элементы должны быть в конце строки.
Пример: выражению track$ будут удовлетворять следующие строки: 5track, aaatrack, и не будут удовлетворять track5, trackaaa.

Символы в квадратных скобках “ [ ] ”

Квадратные скобки заключают в себя набор символов, для которых допустимо лишь одно вхождение в строку одного символа.
Пример: выражению track[10] будет соответствовать строки track1 либо track0. Строки track10, track01 — нет.

Символы крышка в квадратных скобках “ [^ ] ”

Такое сочетание специальных символов указывает на то, что литер из квадратных скобок в строке быть не должно.
Пример: регулярке [^0-8] будет соответствовать строка track, и не будут соответствовать строки track08, track1 и т. д.

Символ дефис “ — ”

Это символ используется для задания диапазона. Например, для выбора всех прописных букв латинского алфавита можно воспользоваться дефисом, как было показано в предыдущем примере. Надо помнить, что в регулярных выражениях мы имеем дело с символами. Строка “76” расценивается как символы “7” и “6”. И если нужно исключить, например, диапазон двухзначных чисел, нужно выносить символ за скобки.

Пример: для выбора диапазона чисел 23-29 регулярное выражение примет вид “2[3-9]”.
Пример: это важный пример. При работе с Google Analytics часто возникает необходимость исключения определенных IP-адресов. Чтобы исключить адреса с 192.168.0.10 по 192.168.0.25, нужно воспользоваться маской 192\.168\.0\.(1[0-9]|2[0-5]).

Символ прямой слэш “ | ”

Вертикальный слэш означает логическую операцию ИЛИ. Применяется к группе символов, заключенных в круглые скобки. Выбирается либо выражение слева от метасимвола, либо справа.
Пример: в предыдущем примере мы выбирали диапазон чисел 10 — 25. Поскольку за скобки мы не можем одновременно вынести цифры 1 и 2, мы поступили так — (1[0-9]|2[0-5]).

Символы круглые скобки “ ( ) ”

Круглые скобки нужны, когда группу элементов нужно объединить в один символ.
Пример: регулярному выражению track(10)+ будет соответствовать строка track1010, track101010. Мы объединили символы “1” и “0” в одну группу “10”, а “+” указывает, что эта группа может повторяться произвольное число раз.

Символы фигурные скобки “ < >”

В фигурных скобках задается число повторений последнего символа. Можно указать промежуток, например, “” или неограниченное число повторений — “”.
Пример: маске (track) будет соответствовать строка “tracktrack”, а выражению (track) — все строки tracktrack, tracktracktrack и т. д.

Выражение “ \d ”

Для упрощения работы можно пользоваться конструкциями, которые сокращают запись регулярных выражений.
Эта конструкция ставится в соответствию любому символу и заменяет строку “[0-9]”.

Выражение “ \D ”

Это сочетание символов используется, когда нужно исключить все цифры. Она эквивалентна строке “[^0-9]”.

Выражение “ \w ”

Такая конструкция заменяет любую букву алфавита, цифру или знак нижнего подчеркивания “_”.

Выражение “ \W ”

Этому сочетанию символов ставится в соответствие все символы, которые не входят в предыдущую группу — которые не являются буквами, цифрами или подчеркиванием “_”.

Выражение “ \s ”

Конструкция заменяет любой пробельный символ. Пробелов может быть произвольное число.

Выражение “ \S ”

Соответствует любому символу, не являющемуся пробельным.

Регулярные выражения и Google Analytics

Конструкций, которые используются при составлении регулярных выражений, очень много. Мы привели те, которые часто требуются при работе с системами аналитики.

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

Например, если конечный адрес содержит динамически изменяющийся параметр. Допустим, у вас есть интернет магазин, и для каждого пользователя формируется уникальный ID заказа. Чтобы настроить цель, можно использовать регулярное выражение. Динамической частью будет строка вида ORD—XXXXXX, где XXXXXX — автоматически генерируемый номер из цифр.

Для адреса example.com/user/ordes/ORD-123456 регулярное выражение для цели будет иметь вид: ^example\.com\/user\/orders\/ORD—\d.

  • ^ — начинается с;
  • \ — экранирование следующего символа;
  • \d — последовательность из 5 цифр.

При формировании отчетов можно фильтровать источники трафика. Если вас интересуют только пользователи, пришедшие из выдачи Яндекса или Google, используйте конструкцию (yandex|google). Результатом будут строки, где есть эти значения.

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

Регулярные выражения

@serverSerrverlesskiy

Регулярные выражения (англ. regular expressions) — формальный язык поиска и осуществления манипуляций со строками в тексте , основанный на использовании метасимволов.

Регулярные выражения позволяют:

  • Искать текст в строке
  • Заменять подстроки в строке
  • Извлекать информацию из строки

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

Видео​

Сложность использования​

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

let regExp = /^[a-zA-Z0-9.!#$%&’*+/=?^_`<|>~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/ 

Определение регулярных выражения​

Определение регулярного выражения, это создание шаблона, на основе которого будет происходить работа со строками. В JavaScript регулярные выражения — это объект, который может быть определён двумя способами.

  • Литерал
  • Конструкция

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

let regExp = /шаблон/ 

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

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

let regExp = new RegExp('шаблон') 

Компиляция регулярного выражения созданного с использованием конструктора происходит в момент выполнения скрипта. Такой способ создания стоит использовать, если ваше регулярное выражение создаётся из динамически сгенерированной строки.

Использование​

Использование регулярных выражений рассмотрим на примере:

let regExp = /banana/ 

Этим кодом мы создали простое регулярное выражение, которое ищет строку banana . Для тестирования регулярного выражения можно использовать метод .test(string) , результатом работы метода является boolean значение.

Интерактивный редактор

function learnJavaScript()
let regExp = /banana/,
str = 'fanana ranana banana'
return regExp.test(str) ? 'Нашёл' : 'Нету'
>

В примере регулярное выражение ищет подстроку banana в строке str .

Якоря​

Якоря привязывают шаблон к началу или концу строки. Для привязки к началу строки используется — ^ , а к концу — $ .

Интерактивный редактор

function learnJavaScript()
let regExp = /^banana/,
str = 'lime banana orange'
return regExp.test(str) ? 'Нашёл' : 'Нету'
>

Используя такой шаблон /banana/ вы будете искать banana во всей строке. Если нужно проверить на полное совпадение строки с шаблоном нужно использовать якоря /^banana$/ . Метод .test() вернёт true только в том случае, если вся строка это banana .

Флаги​

Флаги используются для расширения осуществляемого регулярными выражениями поиска.

  • g — при поиске ищет все совпадения;
  • i — поиск не зависит от регистра [Z-z] ;
  • m — многострочный режим;
  • s — включает режим dotall, при котором точка . может соответствовать символу перевода строки;
  • y — выполняет поиск начиная с символа, который находится на позиции свойства lastindex текущего регулярного выражения;
  • u — включает поддержку Unicode.

Использование флагов при разных способах создания шаблона регулярного выражения

  • Литерал
  • Конструкция
let regExp = /шаблон/флаг // prettier-ignore 

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

Интерактивный редактор

function learnJavaScript()
let regExp = /banana/i,
str = 'faNana RanaNA BaNanA'
return regExp.test(str) ? 'Нашёл' : 'Нету'
>

Попробуйте убрать флаг i из примера.

let regExp = new RegExp('шаблон', 'флаг') 

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

Интерактивный редактор

function learnJavaScript()
let regExp = new RegExp('banana', 'i'),
str = 'faNana RanaNA BaNanA'
return regExp.test(str) ? 'Нашёл' : 'Нету'
>

Попробуйте убрать флаг i из примера. Теперь поиск зависит от регистра.

Итого​

Тема очень обширная и нечасто используемая нами в разработке, поэтому если интересно, то подробней можно познакомиться с ней здесь, здесь и здесь.

EnglishMoji!

Проблемы?​

Пишите в Discord или телеграмм чат, а также подписывайтесь на наши новости

Вопросы​

Для чего нужны регулярные выражения?

  1. Cоздание шаблонов
  2. Манипуляции со строками
  3. Редактирования строк

Какой символ используется для литерального создания регулярного выражения?

  1. Слеш /
  2. Обратный слеш \
  3. Квадратные скобки []

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

  1. В литеральном
  2. В конструкции
  3. При любом способе динамическое изменение допустимо

Для того чтобы понять насколько вы усвоили этот урок пройдите тест в мобильном приложении в нашей школы по этой теме.

EnglishMoji!

Ссылки​

Contributors ✨​

Thanks goes to these wonderful people (emoji key):

Регулярные выражения в Python: инструкция, примеры и практика

Регулярные выражения в Python: инструкция, примеры и практика

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

Освойте профессию
«Python-разработчик»

Что такое регулярные выражения?

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

Python-разработчик
Освойте Python, самый популярный язык программирования
3 690 ₽/мес 6 150 ₽/мес

dffsdd (3)

Первая идея — проверять строку на наличие символа at (@), ведь он есть в каждом адресе электронной почты, но пользователь может ввести email@. Символ есть, но это все еще не адрес электронной почты. Регулярные выражения в Python — это шаблоны, по которым можно проверять валидность данных, искать совпадения в тексте или заменять определенные фрагменты . Плюс таких выражений в том, что они поддерживаются практически во всех языках программирования. Изучив основной принцип работы, можно будет писать «регулярки» в коде любого другого проекта. Регулярное выражение для проверки валидности адреса электронной почты в Python будет выглядеть так:

r'^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]$'

Напишем код небольшой функции для проверки валидности адресов электронной почты. Наше регулярное выражение поместим в переменную email_pattern, с помощью функции match() будем искать совпадения и возвращать True или False, в зависимости от того, является ли строка адресом электронной почты.

import re email_pattern = r'^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]$' def is_valid_email(email): return re.match(email_pattern, email) is not None

Теперь создадим несколько переменных с адресами и проверим каждый нашей функцией:

email1 = "user@example.com" email2 = "invalid_email@" email3 = "another.user123@subdomain.domain" print(is_valid_email(email1)) # True print(is_valid_email(email2)) # False print(is_valid_email(email3)) # True

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

Станьте разработчиком на Python и решайте самые разные задачи: от написания кода до автоматизации процессов

Регулярные выражения в Python

Регулярные выражения или RegEx — строки, задающие шаблон для поиска фрагментов в тексте. По сути, RegEx можно назвать узкоспециализированным языком программирования, встроенным в Python. У регулярных выражений есть свой строгий синтаксис, набор функций для проверки совпадений и изменения исходной строки. В Python регулярные выражения доступны в модуле re, который необходимо импортировать в начале файла с помощью import re. Для экранирования обычно используют символ обратного слэша (\) или raw-строки (r»). Рекомендуется использовать второй способ, так как в больших регулярных выражениях и так будет довольно много слэшей.

Читайте также Как стать Python-разработчикоми начать зарабатывать в IT от 80 000 ₽

Функции регулярных выражений в Python

re.match() — поиск вхождения шаблона в начало строки. В качестве аргументов требуется передать сначала шаблон, а потом строку для проверки:

import re str = "Банкиров ребрендили-ребрендили-ребрендили, да не выребрендировали" print(re.match(r'ре', str))
  • .group() — возвращает тот фрагмент строки, в котором нашлось совпадение;
  • .span() — возвращает кортеж с начальной и конечной позицией искомого шаблона;
  • .string() — возвращает строку, которую передали в re.search().

re.findall() — поиск всех вхождений шаблона в любом месте строки:

import re str = "Банкиров ребрендили-ребрендили-ребрендили, да не выребрендировали" print(re.findall(r'ре', str, re.IGNORECASE)) >>> ['ре', 'ре', 'ре', 'ре', 'ре', 'ре', 'ре', 'ре']

re.sub() — заменяет фрагменты в соответствии с шаблоном:

import re string = "шел дождь и два студента" result = re.sub(r'два', 'три', string) print(result) >>> шел дождь и три студента

re.split() — разделяет строку по шаблону, количество разделений задается числом:

import re string = "шел дождь и два студента" result = re.split(r' ', string, 4) print(result) >>> ['шел', 'дождь', 'и', 'два', 'студента']
import re string = "шел дождь и два студента" result = re.split(r' ', string, 1) print(result) >>> ['шел', 'дождь и два студента']

Эти функции реализуют базовые возможности регулярных выражений в Python.

Метасимволы регулярных выражений в Python

В примерах выше мы использовали регулярные выражения для поиска конкретных слов и слогов, но возможности технологии предоставляют работу с более продвинутыми шаблонами. К примеру, можно искать последовательности символов или любые символы из заданного диапазона. Сделать это можно с помощью специальных метасимволов.

Метасимвол Зачем нужен Как использовать
. Задает один произвольный символ, кроме новой строки E.am.le
[…] Любой символ в скобках, сами символы можно задавать с помощью перечислений или диапазонов [123abc] — только указанные символы[A-Za-z0-9] — весь английский алфавит и цифры[А-ЯЁа-яё0-9] — весь русский алфавит и цифры
[^…] Любой символ, исключая указанные в скобках, сами символы можно задавать с помощью перечислений или диапазонов [^A-Za-z]
^ Начало строки ^Hello
$ Конец строки Hello$
| Логический оператор ИЛИ. Поиск одного из нескольких указанных вариантов [0-9]|[IVXLCDM] — арабские или римские цифры
\ Экранирование, с помощью которого Python понимает, является ли следующий символ обычным или специальным. Можно обычные символы превращать в метасимволы и обратно \[\.\] — метасимволы становятся обычными\d\W\A — обычные символы становятся метасимволами
* Произвольное число повторений одного символа Hello*
? Строго одно повторение символа Hello?
(…) Группировка символов в скобках ([A-Z][A-Za-z]+)
Число повторений предыдущего символа Hello — строка четыре раза подрядHello — строка от одного до четырех раз подрядHello — строка от четырех раз подрядHello — строка от нуля до четырех раз подряд

Важно отметить, что буквы «Ё» и «ё» не входят в диапазоны [А-Я] и [а-я]. Поэтому их надо отдельно включать, иначе регулярное выражение будет работать с ошибками.

Выше мы говорили про то, что обратный слэш (\) может превращать метасимволы в обычные и наоборот. К примеру, обычная точка (.) будет обозначать произвольный символ, а точка с обратным слэшем (\.) — просто точку. Такой принцип работает и с буквами латинского алфавита, которые становятся метасимволами.

Символ Зачем нужен
\d Любая цифра, заменяет собой запись [0-9]
\D Исключает все цифры, заменяет собой запись [^0-9]
\s Любой пробельный символ, включая пробел, табуляцию, новую строку и возврат каретки
\S Любой символ, исключая пробельный
\w Любая буква, цифра и знак нижнего подчеркивания (_)
\W Любой символ, кроме буквы, цифры и нижнего подчеркивания
\A Начало строки, заменяет собой запись ^
\Z Конец строки, заменяет собой запись $
\b Начало или конец слова
\B Середина слова
\n Новая строка
\t Табуляция
\r Возврат каретки

Флаги регулярных выражений в Python

Расширить возможность регулярных выражений в Python можно с помощью специальных флагов, которые передаются в функцию. С флагом re.IGNORECASE, игнорирующим регистр символов, мы уже познакомились выше. Но есть и другие флаги, ускоряющие работу с «регулярками».

Краткая запись флага Полная запись флага Зачем нужен
re.I re.IGNORECASE Игнорирует регистр символов
re.A re.ASCII Возвращает совпадения только по таблице ASCII-символов
re.X re.VERBOSE Позволяет использовать комментарии в регулярных выражениях
re.S re.DOTALL Метасимвол точка (.) возвращает совпадения по всем символам, включая новую строку.
re.L re.LOCALE Добавляет к \w, \W, \b, \B, \s и \S региональные настройки, но работает только с байтовыми строками
re.M re.MULTILINE Возвращает совпадения в начале каждой новой строки, если используется с ^, и в конце каждой новой строки — если с $

Практические задачи

В регулярных выражениях мало теории, и освоить ее может даже новичок, который уже уверенно пишет простой код на Python. Больше времени уйдет, чтобы довести до автоматизма навык составлять сложные регулярные выражения. Еще больше усилий надо будет приложить, чтобы научиться читать и понимать чужие «регулярки». Добиться этого можно только с помощью постоянной практики.

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

Задача 1

Вернуть первое слово из строки «Регулярные выражения в Python».

Для решения задачи будем использовать функцию re.findall(), которая ищет все вхождения шаблона в любом месте строки. Для начала вернем каждый символ исходной строки с помощью символа точки (.):

import re string = "Регулярные выражения в Python" result = re.findall(r'.', string) print(result) >>> ['Р', 'е', 'г', 'у', 'л', 'я', 'р', 'н', 'ы', 'е', ' ', 'в', 'ы', 'р', 'а', 'ж', 'е', 'н', 'и', 'я', ' ', 'в', ' ', 'P', 'y', 't', 'h', 'o', 'n']

Если обратить внимание на вывод программы, то можно заметить, что в результат попали пробелы. Все из-за того, что символ точки (.) выбирает все символы, кроме новых строк. Исправим это, заменив точку на \w, который выбирает любую букву, цифру или знак нижнего подчеркивания:

import re string = "Регулярные выражения в Python" result = re.findall(r'\w', string) print(result) >>> ['Р', 'е', 'г', 'у', 'л', 'я', 'р', 'н', 'ы', 'е', 'в', 'ы', 'р', 'а', 'ж', 'е', 'н', 'и', 'я', 'в', 'P', 'y', 't', 'h', 'o', 'n']

Мы избавились от пробелов и теперь попробуем объединить буквы в слова с помощью символа +:

import re string = "Регулярные выражения в Python" result = re.findall(r'\w+', string) print(result) >>> ['Регулярные', 'выражения', 'в', 'Python']

Теперь осталось выбрать только первое слово с помощью символа ^:

import re string = "Регулярные выражения в Python" result = re.findall(r'^\w+', string) print(result) >>> ['Регулярные']

Задача 2

Вернуть последнее слово из строки «Регулярные выражения в Python».

Эта задача тесно связана с прошлой. Мы уже научились получать каждое слово из фразы и возвращать только первое. Для того чтобы вернуть последнее слово, следует заменить символ ^ в начале регулярного выражения на $ в конце:

import re string = "Регулярные выражения в Python" result = re.findall(r'\w+$', string) print(result) >>> ['Python']

Задача 3

Проверить формат телефонного номера. Номер должен состоять из 11 знаков и начинаться с 7 или 8. На вход подается список телефонных номеров. Если номер корректный, то следует вернуть Correct, иначе — Incorrect.

Сперва составим регулярное выражение. В самом начале должна идти цифра 7 или 8. Запишем это в виде [78]. После этого следуют 10 любых цифр от 0 до 9 — [0-9]. Если записать это все вместе, то получится [78][0-9].

Теперь воспользуемся условием if. Если запись номера телефона будет соответствовать шаблону и содержать в себе 11 символов, то будем печатать Correct, иначе — Incorrect. По всему списку номеров пройдемся с помощью цикла for:

import re phone_numbers = ['89154167654', '38764356622', '79853452190', '891678645432', '8916657b589'] for number in phone_numbers: if re.match(r'[78][0-9]', number) and len(number) == 11: print('Correct') else: print('Incorrect') >>> Correct >>> Incorrect >>> Correct >>> Incorrect >>> Incorrect

Задача 4

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

Для решения задачи надо сперва извлечь все числа из списка. Сделать это можно с помощью \d:

import re booking = 'Иванов 023 14-08-2023, Петров 114 15-08-2023, Семенов 001 20-08-2023, Кутузов 001 01-09-2023' result = re.findall(r'\d', booking) print(result) >>> ['0', '2', '3', '1', '4', '0', '8', '2', '0', '2', '3'. ]

На выходе мы получили абсолютно все цифры из списка, но мы знаем точный паттерн, по которому задается дата, — ДД-ММ-ГГГГ. Сперва идут двузначное число дня, потом двузначное число месяца и в самом конце четырехзначное число года. В качестве разделителей используется дефис. Все это можно описать в виде следующего регулярного выражения:

import re booking = 'Иванов 023 14-08-2023, Петров 114 15-08-2023, Семенов 001 20-08-2023, Кутузов 001 01-09-2023' result = re.findall(r'\d-\d-\d', booking) print(result) >>> ['14-08-2023', '15-08-2023', '20-08-2023', '01-09-2023']

Задача 5

В России для регистрации машин используют принятый стандарт регистрационных знаков. Для частных автомобилей он состоит из серии, самого номера и кода региона регистрации. Запись автомобильного номера выглядит так: С065МК777. На вход программы подается список автомобильных номеров. Надо проверить соответствие их записи с государственным стандартом.

Ввод Вывод
В443РХ777
АА545Р750
Е454АЕ150
М709РО96
В45РАВ77
У822НО02
✅ — В443РХ777
❌ — АА545Р750
✅ — Е454АЕ150
✅ — М709РО96
❌ — В45РАВ77
✅ — У822НО02

Для записи серии номера используются заглавные буквы русского алфавита, у которых есть аналоги в латинице — А, В, Е, К, М, Н, О, Р, С, Т, У и Х. Номер региона записывается двумя или тремя цифрами. Будем проверять наличие последовательности из одной буквы, трех цифр, двух букв и от двух до трех цифр.

По всему списку пройдемся с помощью цикла for, а проверять соответствие и печатать результат будем с помощью условия if:

import re numbers = 'В443РХ777', 'АА545Р750', 'Е454АЕ150', 'М709РО96', 'В45РАВ77', 'У822НО02' for number in numbers: if re.findall(r'[АВЕКМНОРСТУХ]\d[АВЕКМНОРСТУХ]\d', number): print('✅ — ' + number) else: print('❌ — ' + number) .

Где практиковаться с регулярными выражениями

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

  • Regex Learn — интерактивный курс по регулярным выражениям. Авторы предлагают пошагово изучить тему с нуля. На платформе есть базовый курс из 56 уроков и еще один — по применению регулярных выражений в SEO из 17 уроков из 9 видеороликов. Оба курса бесплатные, но доступны только на английском языке.

курса Regex Learn

  • Regex One — еще один пошаговый курс, освещающий все аспекты работы с регулярными выражениями. Во время прохождения придется решать много задач и составлять сложные «регулярки».

упражнения по регулярным выражениям Python Regex One

  • Codewars — на платформе собраны задачи по языкам программирования, но среди них встречаются и регулярные выражения. Можно отфильтровать коллекцию задач по темам, чтобы решать только нужные.

Интерфейс платформы с задачами Codewars

Во время решения задач не всегда удобно запускать полноценную среду разработки для проверки выражения. Для этого есть онлайн-редакторы RegEx, с помощью которых можно вводить «регулярки» в окне браузера. Также на таких платформах есть визуализация работы шаблонов, что может наглядно показать выборку символов. Эта функция особенно полезна на начальных этапах освоения «регулярок».

Список популярных онлайн-редакторов регулярных выражений:

Итог

  • Регулярные выражения в Python — мощный инструмент для работы с текстом и строками.
  • С помощью регулярных выражений можно проверять валидность адресов, парсить документы и искать данные в тексте.
  • Шаблоны позволяют тонко настроить поиск по фрагментам текста.
  • В теме регулярных выражений мало теории, и успех освоения технологии зависит от большого количества практики.
  • Регулярные выражения поддерживаются практически во всех языках программирования, поэтому, освоив их в Python, можно применять и в других популярных языках.
  • Для закрепления материала важно последовательное изучение. Не стоит после решения задач по поиску дат в тексте переходить к парсингу HTML-файлов.

Python-разработчик

Освойте Python с нуля. Подготовим к трудоустройству: дадим много практики, реальные проекты для портфолио, поможем с резюме. Лучшие студенты пройдут стажировки в проектах компаний-партнеров.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *