Python RegEx
Регулярное выражение, или сокращённо RegEx, — это последовательность символов, описывающая шаблон поиска.
С его помощью можно проверить, содержит ли строка этот шаблон.
Модуль RegEx
Регулярные выражения в Python обрабатывает re, встроенный пакет.
Сначала импортируйте его:
Пример
import re
RegEx в Python
После импорта re регулярные выражения готовы к использованию:
Пример
re и проверьте, начинается ли строка с "The" и заканчивается ли на "Spain".
Используйте re.search() с шаблоном "^The.*Spain$".
Вывод: полная программа на Python
import re
txt = "The rain in Spain"
x = re.search("^The.*Spain$", txt)
Функции RegEx
Для поиска совпадений в строке модуль re предоставляет следующие функции:
findall- Возвращает список всех совпаденийsearch- Возвращает объект Match, если совпадение есть в любом месте строкиsplit- Разрезает строку в месте каждого совпадения и возвращает список частейsub- Заменяет одно или несколько совпадений на выбранную вами строку
Метасимволы
Метасимвол — это символ с особым значением:
[]- Задаёт набор символов\- Начинает специальную последовательность или экранирует специальный символ.- Совпадает с любым символом, кроме символа новой строки^- Совпадает в начале$- Совпадает в конце*- Ноль или более повторений+- Одно или более повторений?- Ноль или одно повторение{}- Ровно указанное вами количество повторений|- Либо один вариант, либо другой()- Захватывает и группирует
Флаги
Флаги, добавленные к шаблону, меняют поведение регулярного выражения.
re.ASCII(re.A) - Совпадает только с символами ASCIIre.DEBUG- Показывает отладочную информациюre.DOTALL(re.S) - Позволяет символу . совпадать со всем, включая символы новой строкиre.IGNORECASE(re.I) - Не учитывает регистр при поиске совпаденийre.MULTILINE(re.M) - Находит совпадения в начале и в конце каждой строки текстаre.NOFLAG- Указывает, что для этого шаблона не задан ни один флагre.UNICODE(re.U) - Даёт Unicode-совпаденияre.VERBOSE(re.X) - Разрешает пробелы и комментарии внутри шаблона
Специальные последовательности
Если поставить \ перед определёнными символами, получится специальная последовательность с собственным особым значением. Вот доступные последовательности:
\A- Находит совпадение, только когда указанные символы открывают строку\b- Находит совпадение, когда указанные символы начинают или заканчивают слово\B- Находит совпадение, когда указанные символы присутствуют, но НЕ в начале и не в конце слова\d- Находит совпадение для любой цифры (0-9) в строке\D- Находит совпадение для всего в строке, что НЕ является цифрой\s- Находит совпадение для любого пробельного символа в строке\S- Находит совпадение для всего в строке, что НЕ является пробельным символом\w- Находит совпадение для любого символа слова в строке\W- Находит совпадение для всего в строке, что НЕ является символом слова\Z- Находит совпадение, только когда указанные символы закрывают строку
Наборы
Набор — это группа символов в квадратных скобках [], и он тоже имеет особое значение:
[arn]- Совпадает с одним из перечисленных символов: a, r или n[a-n]- Совпадает с любой строчной буквой, стоящей по алфавиту между a и n[^arn]- Совпадает с любым символом, кроме a, r и n[0123]- Совпадает с одной из перечисленных цифр: 0, 1, 2 или 3[0-9]- Совпадает с любой одной цифрой от 0 до 9[0-5][0-9]- Совпадает с любым двузначным числом от 00 до 59[a-zA-Z]- Совпадает с любой буквой от a до z, строчной ИЛИ заглавной[+]- Внутри набора символы +, *, ., |, (), $ и {} теряют особое значение, поэтому [+] просто ищет в строке литеральный символ +
Функция findall()
Функция findall() собирает все совпадения в список, который хранит их в том порядке, в котором они были найдены.
Если совпадений нет, вы получаете пустой список:
Пример
re.findall(), чтобы найти все вхождения "ai" в строке "The rain in Spain".
Выведите список совпадений.
Вывод: полная программа на Python
import re
txt = "The rain in Spain"
x = re.findall("ai", txt)
print(x)
Пример
re.findall(), чтобы найти "Portugal" в строке "The rain in Spain".
Выведите результат (пустой список, если совпадений нет).
Вывод: полная программа на Python
import re
txt = "The rain in Spain"
x = re.findall("Portugal", txt)
print(x)
Функция search()
Функция search() просматривает строку и, найдя совпадение, возвращает вам объект Match.
Несколько совпадений в строке ничего не меняют, потому что вы получаете только первое:
Если совпадений нет, вы получаете значение None:
Пример
re.search(), чтобы найти первый пробельный символ в строке "The rain in Spain".
Выведите его позицию с помощью .start().
Вывод: полная программа на Python
import re
txt = "The rain in Spain"
x = re.search("\s", txt)
print("Первый пробельный символ находится в позиции:", x.start())
Пример
re.search(), чтобы найти "Portugal" в строке "The rain in Spain".
Выведите результат (None, если совпадений нет).
Вывод: полная программа на Python
import re
txt = "The rain in Spain"
x = re.search("Portugal", txt)
print(x)
Функция split()
Функция split() разбивает строку в месте каждого совпадения и возвращает части в виде списка:
Параметр maxsplit ограничивает количество разбиений:
Пример
re.split(), чтобы разделить "The rain in Spain" в месте каждого пробельного символа.
Выведите полученный список.
Вывод: полная программа на Python
import re
txt = "The rain in Spain"
x = re.split("\s", txt)
print(x)
Пример
re.split(), чтобы разделить "The rain in Spain" только по первому вхождению (maxsplit=1).
Выведите результат.
Вывод: полная программа на Python
import re
txt = "The rain in Spain"
x = re.split("\s", txt, 1)
print(x)
Функция sub()
Функция sub() ставит выбранный вами текст на место каждого совпадения:
Параметр count ограничивает количество замен:
Пример
re.sub(), чтобы заменить каждый пробельный символ на "9" в строке "The rain in Spain".
Выведите результат.
Вывод: полная программа на Python
import re
txt = "The rain in Spain"
x = re.sub("\s", "9", txt)
print(x)
Пример
re.sub(), чтобы заменить первые 2 пробельных символа на "9" в строке "The rain in Spain".
Выведите результат.
Вывод: полная программа на Python
import re
txt = "The rain in Spain"
x = re.sub("\s", "9", txt, 2)
print(x)
Объект Match
Объект Match хранит сведения о поиске и о том, что было найдено.
Примечание: если совпадений нет, вы получаете значение None, а объекта Match нет вовсе.
Чтобы получить эти сведения, используйте свойства и методы объекта:
.span()даёт кортеж с позициями начала и конца совпадения.stringвозвращает строку, которую вы передали в функцию.group()возвращает совпавший текст
Пример
re.search(), чтобы найти "ai" в строке "The rain in Spain".
Выведите возвращённый объект Match.
Вывод: полная программа на Python
import re
txt = "The rain in Spain"
x = re.search("ai", txt)
print(x)
Пример
r"\bS\w+" в строке "The rain in Spain".
Выведите позиции совпадения с помощью .span().
Вывод: полная программа на Python
import re
txt = "The rain in Spain"
x = re.search(r"\bS\w+", txt)
print(x.span())
Пример
r"\bS\w+" в строке "The rain in Spain".
Выведите исходную строку с помощью .string.
Вывод: полная программа на Python
import re
txt = "The rain in Spain"
x = re.search(r"\bS\w+", txt)
print(x.string)
Пример
r"\bS\w+" в строке "The rain in Spain".
Выведите найденный текст с помощью .group().
Вывод: полная программа на Python
import re
txt = "The rain in Spain"
x = re.search(r"\bS\w+", txt)
print(x.group())