Руководство по регулярным выражениям в Python для новичков
Если вы программист, скорее всего, вы уже знаете, что такое регулярные выражения (regex). Шаблоны регулярных выражений реализованы почти во всех основных языках программирования, но все же мощность и универсальность этих шаблонов не осознаются большинством разработчиков.
Это руководство посвящено регулярным выражениям и их использованию в языке программирования Python.
Что такое регулярные выражения?
Регулярные выражения – это шаблоны, которые помогают пользователю сопоставлять комбинации символов в текстовых файлах и строках. Вы можете использовать регулярные выражения для фильтрации или поиска определенного шаблона в выводе команды или документа.
Существуют различные варианты использования регулярных выражений, наиболее известной из которых является команда grep в Linux . Другие приложения включают фильтрацию информации, такую как извлечение адресов электронной почты и номеров телефонов из дампа данных.
Основная причина, по которой многие разработчики отклоняются от регулярных выражений, – это незнание возможностей сопоставления с образцом. Некоторые даже находят регулярные выражения сбивающими с толку из-за большого количества символов и последовательностей, используемых в шаблонах.
Какой бы ни была причина, регулярные выражения были и будут одним из наиболее важных аспектов программирования, о котором должен знать каждый.
Регулярные выражения: совпадающие символы и последовательности
Regex – это совершенно новый язык сам по себе. Механизм регулярных выражений интерпретирует шаблоны, состоящие из нескольких символов, имеющих определенные значения. Базовые литералы, такие как буквенно-цифровые символы, соответствуют друг другу. Но сложные символы, такие как $, *, +, {и т. Д., Помогают в сопоставлении более высокого порядка.
- Звездочка (*): соответствует предыдущему символу ноль или более раз. Буквальное значение символа будет «Элемент, умноженный в n раз». Например, если регулярное выражение – abc * , совпадающими строками будут ab, abc, abcc, abccc, abcccc и т. Д. Выражение [bc] * будет соответствовать bc, bcbc, bcbc и т. Д.
- Плюс (+): соответствует предыдущему символу один или несколько раз. Работа символа + аналогична работе * , но символ + пропускает шаблон, если этот символ не встречается. Например, abc + будет соответствовать abc, abcc, abccc и т. Д., Но не ab.
- Вопросительный знак (?): Соответствует предыдущему символу ноль или один раз. Например, шаблон abc? будет соответствовать только ab и abc.
- Труба (|): используется как бинарный оператор ИЛИ . Соответствует любому из символов, предшествующих и следующих за вертикальной чертой. Например, a | b будет соответствовать либо a, либо b.
- Точка (.): Соответствует символу, личность которого неизвестна. Например, ac будет соответствовать aac, abc, acc, a2c и т. Д.
- Морковь (^): соответствует первому символу в шаблоне. Например, ^ Ra будет соответствовать словам, начинающимся с Ra, таким как Rabbit, Raccoon и Random.
- Доллар ($): соответствует последнему символу в шаблоне. Например, знак $ будет соответствовать словам, оканчивающимся на такие, как Van, Dan и Plan.
- Дефис (-): используется для определения диапазона символов. Например, [0-9] будет соответствовать всем однозначным цифровым символам.
В шаблонах регулярных выражений используются следующие специальные последовательности:
- A: возвращает совпадение, если в начале строки присутствуют следующие символы. Например, AThe будет соответствовать словам, начинающимся с The, таким как The, Them, They и т. Д.
- b: возвращает совпадение, если символ находится в начале или в конце слова. Например, bmad и mad b будут соответствовать таким словам, как made и nomad соответственно.
- B: возвращает совпадение, если символ не найден в начале или конце слова.
- d: соответствует числовым символам, присутствующим в строке. Например, / d * будет соответствовать таким числам, как 1, 12, 1232 и т. Д.
- D: соответствует нечисловым символам в строке. / D будет соответствовать a, b, c, f и т. Д.
- s: соответствует пробельному символу в тексте.
- S: соответствует непробельному символу в тексте.
- w: возвращает совпадение, если строка содержит буквенно-цифровые символы, включая символы подчеркивания. Например, w будет соответствовать a, b, c, d, 1, 2, 3 и т. Д.
- W: возвращает совпадение, если строка не содержит буквенно-цифровых символов или знаков подчеркивания.
- 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
Когда вы работаете с текстовыми файлами и выводом, регулярное выражение – отличный инструмент в вашем распоряжении. Вы можете быстро написать код для фильтрации или замены определенных шаблонов в документе.
Запоминание всех символов и соответствующих последовательностей может быть трудным, если вы только начинаете работать с регулярным выражением. Чтобы лучше понять регулярные выражения, время от времени обращайтесь к списку символов, методов и последовательностей, что определенно поможет вам в долгосрочной перспективе.