Руководство по регулярным выражениям в Python для новичков

Если вы программист, скорее всего, вы уже знаете, что такое регулярные выражения (regex). Шаблоны регулярных выражений реализованы почти во всех основных языках программирования, но все же мощность и универсальность этих шаблонов не осознаются большинством разработчиков.

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

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

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

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

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

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

Регулярные выражения: совпадающие символы и последовательности

Regex – это совершенно новый язык сам по себе. Механизм регулярных выражений интерпретирует шаблоны, состоящие из нескольких символов, имеющих определенные значения. Базовые литералы, такие как буквенно-цифровые символы, соответствуют друг другу. Но сложные символы, такие как $, *, +, {и т. Д., Помогают в сопоставлении более высокого порядка.

  1. Звездочка (*): соответствует предыдущему символу ноль или более раз. Буквальное значение символа будет «Элемент, умноженный в n раз». Например, если регулярное выражение – abc * , совпадающими строками будут ab, abc, abcc, abccc, abcccc и т. Д. Выражение [bc] * будет соответствовать bc, bcbc, bcbc и т. Д.
  2. Плюс (+): соответствует предыдущему символу один или несколько раз. Работа символа + аналогична работе * , но символ + пропускает шаблон, если этот символ не встречается. Например, abc + будет соответствовать abc, abcc, abccc и т. Д., Но не ab.
  3. Вопросительный знак (?): Соответствует предыдущему символу ноль или один раз. Например, шаблон abc? будет соответствовать только ab и abc.
  4. Труба (|): используется как бинарный оператор ИЛИ . Соответствует любому из символов, предшествующих и следующих за вертикальной чертой. Например, a | b будет соответствовать либо a, либо b.
  5. Точка (.): Соответствует символу, личность которого неизвестна. Например, ac будет соответствовать aac, abc, acc, a2c и т. Д.
  6. Морковь (^): соответствует первому символу в шаблоне. Например, ^ Ra будет соответствовать словам, начинающимся с Ra, таким как Rabbit, Raccoon и Random.
  7. Доллар ($): соответствует последнему символу в шаблоне. Например, знак $ будет соответствовать словам, оканчивающимся на такие, как Van, Dan и Plan.
  8. Дефис (-): используется для определения диапазона символов. Например, [0-9] будет соответствовать всем однозначным цифровым символам.

В шаблонах регулярных выражений используются следующие специальные последовательности:

  1. A: возвращает совпадение, если в начале строки присутствуют следующие символы. Например, AThe будет соответствовать словам, начинающимся с The, таким как The, Them, They и т. Д.
  2. b: возвращает совпадение, если символ находится в начале или в конце слова. Например, bmad и mad b будут соответствовать таким словам, как made и nomad соответственно.
  3. B: возвращает совпадение, если символ не найден в начале или конце слова.
  4. d: соответствует числовым символам, присутствующим в строке. Например, / d * будет соответствовать таким числам, как 1, 12, 1232 и т. Д.
  5. D: соответствует нечисловым символам в строке. / D будет соответствовать a, b, c, f и т. Д.
  6. s: соответствует пробельному символу в тексте.
  7. S: соответствует непробельному символу в тексте.
  8. w: возвращает совпадение, если строка содержит буквенно-цифровые символы, включая символы подчеркивания. Например, w будет соответствовать a, b, c, d, 1, 2, 3 и т. Д.
  9. W: возвращает совпадение, если строка не содержит буквенно-цифровых символов или знаков подчеркивания.
  10. Z: соответствует символам в конце строки. Например, конец Z будет соответствовать словам, оканчивающимся на конец, таким как изгиб, исправление, склонение и т. Д.

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

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

Чтобы импортировать библиотеку re в Python, добавьте в свой скрипт следующий код:

 import re

Обратите внимание, что при передаче регулярных выражений в Python мы используем необработанные строки, поскольку они не интерпретируют по-разному специальные символы, такие как n и t .

Матч()

Метод re.match () в Python возвращает объект регулярного выражения, если программа находит совпадение в начале указанной строки. Эта функция принимает два основных аргумента:

 re.match(pattern, string)

… где шаблон – это регулярное выражение, а строка – это текст, который необходимо найти.

Взгляните на приведенный ниже фрагмент кода.

 import re
match = re.match(r'Word', "This sentence contains a Word")
print(match)

Символ r перед строкой обозначает необработанную строку.

Выход:

 None

Вышеупомянутый код возвращает None, потому что Word не было в начале строки.

Если совпадение найдено, вы можете распечатать его, используя метод group () , принадлежащий объекту регулярного выражения.

 import re
match = re.match(r'Word', "Word is hard to read")
print(match.group(0))

Выход:

 Word

Метод re.search () принимает те же аргументы, что и re.match (). В то время как match () возвращает только совпадения, присутствующие в начале строки, search () возвращает совпадения, найденные по любому индексу в строке.

 import re
match = re.search(r'Word', "This sentence contains a Word. Word is hard to read.")
print(match.group(0))

Обратите внимание, что методы match () и search () возвращают только одно совпадение с шаблоном. В вышеупомянутом коде Word появляется дважды. Но функция search () найдет только первое вхождение слова.

 Word

Найти все()

Как вы уже догадались, метод findall () возвращает все возможные совпадения в строке.

 import re
match = re.search(r'Word', "This sentence contains a Word. Word is hard to read.")
for elem in match:
print(elem)

Вместо того, чтобы возвращать объект регулярного выражения, функция findall () возвращает список всех совпадений. Вы можете перебирать список, используя цикл for в Python .

Расколоть()

Если вы хотите разбить строку на подстроки, используя шаблон в качестве разделителя, то функция split () – это то, что вам нужно.

 import re
split = re.split(r'and', "This word and that and this are different.")
print(split)

Выход:

 ['This word", "that", "this are different."]

Sub ()

Метод sub () позволяет пользователю подставлять определенное слово вместо шаблона. Требуются следующие аргументы.

 re.sub(pattern, replacement, string)

Рассмотрим этот фрагмент кода:

 import re
result = re.sub(r'and', 'or', "Dave and Harry must be punished.")
print(result)

Выход:

 Dave or Harry must be punished.

Скомпилировать ()

Метод re.compile () в библиотеке re позволяет пользователю сохранять скомпилированную версию шаблона регулярного выражения в памяти. Затем, используя скомпилированный объект, пользователь может быстро отфильтровать указанный текстовый дамп на соответствие шаблонам.

 import re
pattern = re.compile('Python')
match = pattern.findall("Python is a great language for writing scripts. Python is easy to learn.")
print(match)

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

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

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

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