Регулярные выражения в Python [с примерами]: как реализовать?

Опубликовано: 2021-01-29

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

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

Оглавление

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

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

Изучите курсы по науке о данных в лучших университетах мира. Участвуйте в программах Executive PG, Advanced Certificate Programs или Master Programs, чтобы ускорить свою карьеру.

Метасимволы в RegEx

  1. '.': подстановочный знак, соответствует одному символу (любому символу, но только один раз)
  2. ^: обозначает начало строки
  3. $: обозначает конец строки
  4. [ ]: соответствует одному из наборов символов в пределах [ ]
  5. [az]: соответствует одному из диапазона символов a,b,…,z
  6. [^abc]: соответствует символу, отличному от a, b или c.
  7. a|b: соответствует либо a, либо b, где a и b — строки
  8. () : обеспечивает область действия для операторов
  9. \ : позволяет экранировать специальные символы (\t, \n, \b, \.)
  10. \b: соответствует границе слова
  11. \d : любая цифра, эквивалентная [0-9]
  12. \D: любая нецифра, эквивалентная [^0-9]
  13. \s : любой пробел, эквивалентный [ \t\n\r\f\v]
  14. \S : любой непробельный символ, эквивалентный [^\t\n\r\f\v]
  15. \w : любая буквенно-цифровая, эквивалентная [a-zA-Z0-9_]
  16. \W : любой небуквенно-цифровой, эквивалентный [^a-zA-Z0-9_]
  17. '*': соответствует нулю или более вхождений
  18. '+': соответствует одному или нескольким вхождениям
  19. '?': соответствует нулю или одному вхождению
  20. {n}: ровно n повторений, n>=0
  21. {n,}: не менее n повторений
  22. {,n}: не более n повторений
  23. {m,n}: не менее m повторений и не более n повторений

Примеры для понимания обходного пути

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

1. Фильтрация электронной почты:

Предположим, вы хотите отфильтровать все идентификаторы электронной почты из длинного абзаца. Общий формат электронного письма:

имя_пользователя@имя_домена. <домен_верхнего_уровня>

Имя пользователя может быть буквенно-цифровым, и, следовательно, мы можем использовать \w для их обозначения, но есть вероятность, что пользователь создаст учетную запись как firstName.surname. Чтобы решить эту проблему, мы уйдем от точки и создадим набор символов. Далее, имя_домена должно быть только буквенным, и поэтому A-Za-z будет обозначать это. Домен верхнего уровня обычно .com, .in, .org, но в зависимости от варианта использования вы можете выбрать либо весь диапазон алфавита, либо отфильтровать определенные домены.

Регулярное выражение этого будет выглядеть так:

^([a-zA-Z0-9_.]+)@([a-zA-Z0-9-]+)\.([a-zA-Z]{2,4})$

Здесь также объявляются начало и конец шаблона, а домен верхнего уровня может содержать только 2-4 символа. Все выражение имеет 3 группы.

2. Фильтрация дат:

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

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

Простое регулярное выражение, которое охватывает различные даты, показано ниже:

^(\d{1,2})[/-](\d{1,2})[/-](\d{2,4})$

Этот шаблон фиксирует формат даты с дефисом или косой чертой. Дата и месяц ограничиваются одной или двумя цифрами, а год — до 40 цифр. Соответствующие объекты фиксируются как группы, которые в данном случае необязательны.

Читайте также: Идеи и темы проекта Python

Как это реализовать на Python?

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

импортировать повторно

шаблон = '^(\d{1,2})[/-](\d{1,2})[/-](\d{2,4})$'

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

  1. re.findall(): эта функция возвращает список всех совпадений в тестовой строке на основе переданного шаблона. Рассмотрим этот пример:

string = '25-12-1999 случайный текст здесь 25/12/1999'

печать (re.findall (шаблон, строка))

Он вернет только даты из строки в списке.

  1. re.sub(): Sub в этой функции означает замену и делает то же самое. Он заменяет совпадения предоставленным значением замены. Функция принимает шаблон, строку, значение замены и необязательный параметр счетчика. Параметр count определяет, сколько вхождений вы хотите заменить. По умолчанию он заменяет их все и возвращает новую строку.
  2. re.split(): разбивает строку на совпадающих сайтах и ​​возвращает части в виде отдельных строк в списке.
  3. re.search(): эта функция возвращает объект соответствия, содержащий совпадение, найденное в строке, вместе со всеми захваченными группами. Это может пригодиться, если вы хотите сохранить эти группы в виде отдельных столбцов.

Чтобы выполнить это:

match = re.search(шаблон, строка)

матч.группа(1)

Group(0) возвращает полное совпадение, а соответствующие следующие числа обозначают другие группы.

Оформить заказ: зарплата разработчиков Python в Индии

Заключение

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

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

Следующие примеры иллюстрируют работу регулярных выражений в Python:
а. Фильтрация электронной почты
Регулярные выражения можно эффективно использовать для фильтрации электронных писем. Обычный синтаксис для фильтрации электронной почты: - ^((a-zA-Z0-9_.)+)@((a-zA-Z0-9-)+).((a-zA-Z){2,4} )$
Это выражение разделено на три группы и подходит для многих случаев, в том числе, когда имя пользователя является буквенно-цифровым и когда оно содержит точку, например, «first.last@». Это выражение будет использоваться для топовых доменов, содержащих 2-4 символа.
б. Фильтрация дат
Даты могут быть решающим фактором при обработке фильтрации данных. Текстовые данные, с которыми вы имеете дело, часто содержат даты. Регулярное выражение или RegEx, которое извлекает данные из обычного текста, имеет вид - ^(d{1,2})(/-)(d{1,2})(/-)(d{2,4})$
Дата и месяц могут содержать до 2 цифр, а месяц — до 4 цифр.

Какие функции задействованы в реализации регулярных выражений в Python?

Следующие функции участвуют в реализации регулярных выражений в Python:
1. re.findall() — эта функция принимает шаблон, который должен сопоставляться с текстовой строкой. Он возвращает совпадающие строки.
2. re.sub() — Sub в «re.sub» означает «замещение». Этот метод выполняет ту же функцию, что и функция «re.findall()».
3. re.split() - разделяет строки вокруг разделителя, который должен быть передан в качестве параметра. Разделитель может быть любым.
4. re.search() — эта функция возвращает совпадение, найденное в строке, вместе с другими захваченными группами строк.

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

Ниже приведены некоторые из специальных последовательностей, используемых в регулярных выражениях:
1. A: Проверьте, начинается ли строка с заданного символа.
2. (косая черта) b: проверяет, начинается ли строка с данного символа или заканчивается. (строка)/b проверяет начало, а (обратная косая черта) b (строка) проверяет конец.
3. Б: Это прямо противоположно б. Проверяет, не начинается ли строка с заданного символа.
4. d: Проверяет числовые значения в строке.
5. D: Проверяет любое нечисловое значение или символ.
6. s: Проверяет наличие любых пробельных символов.
7. S: Проверяет любой непробельный символ.
8. w: Проверяет любой буквенно-цифровой символ.
9. W: Проверяет любой небуквенно-цифровой символ.