Перейти к основному содержимому

Python RegEx

Регулярное выражение, или сокращённо RegEx, — это последовательность символов, описывающая шаблон поиска.

С его помощью можно проверить, содержит ли строка этот шаблон.


Модуль RegEx

Регулярные выражения в Python обрабатывает re, встроенный пакет.

Сначала импортируйте его:

Пример

main.py
import re

RegEx в Python

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

Пример

Проверьте, начинается ли строка с «The» и заканчивается ли на «Spain»:
Prompt
Импортируйте модуль re и проверьте, начинается ли строка с "The" и заканчивается ли на "Spain". Используйте re.search() с шаблоном "^The.*Spain$".
Вывод: полная программа на Python

Функции RegEx

Для поиска совпадений в строке модуль re предоставляет следующие функции:

  • findall - Возвращает список всех совпадений
  • search - Возвращает объект Match, если совпадение есть в любом месте строки
  • split - Разрезает строку в месте каждого совпадения и возвращает список частей
  • sub - Заменяет одно или несколько совпадений на выбранную вами строку

Метасимволы

Метасимвол — это символ с особым значением:

  • [] - Задаёт набор символов
  • \ - Начинает специальную последовательность или экранирует специальный символ
  • . - Совпадает с любым символом, кроме символа новой строки
  • ^ - Совпадает в начале
  • $ - Совпадает в конце
  • * - Ноль или более повторений
  • + - Одно или более повторений
  • ? - Ноль или одно повторение
  • {} - Ровно указанное вами количество повторений
  • | - Либо один вариант, либо другой
  • () - Захватывает и группирует

Флаги

Флаги, добавленные к шаблону, меняют поведение регулярного выражения.

  • re.ASCII (re.A) - Совпадает только с символами ASCII
  • re.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() собирает все совпадения в список, который хранит их в том порядке, в котором они были найдены.

Если совпадений нет, вы получаете пустой список:

Пример

Выведите все совпадения в виде списка:
Prompt
Используйте re.findall(), чтобы найти все вхождения "ai" в строке "The rain in Spain". Выведите список совпадений.
Вывод: полная программа на Python

Пример

Если собирать нечего, список возвращается пустым:
Prompt
Используйте re.findall(), чтобы найти "Portugal" в строке "The rain in Spain". Выведите результат (пустой список, если совпадений нет).
Вывод: полная программа на Python

Функция search()

Функция search() просматривает строку и, найдя совпадение, возвращает вам объект Match.

Несколько совпадений в строке ничего не меняют, потому что вы получаете только первое:

Если совпадений нет, вы получаете значение None:

Пример

Найдите, где находится первый пробельный символ в строке:
Prompt
Используйте re.search(), чтобы найти первый пробельный символ в строке "The rain in Spain". Выведите его позицию с помощью .start().
Вывод: полная программа на Python

Пример

Выполните поиск, который ничего не находит:
Prompt
Используйте re.search(), чтобы найти "Portugal" в строке "The rain in Spain". Выведите результат (None, если совпадений нет).
Вывод: полная программа на Python

Функция split()

Функция split() разбивает строку в месте каждого совпадения и возвращает части в виде списка:

Параметр maxsplit ограничивает количество разбиений:

Пример

Разбейте строку в месте каждого пробельного символа:
Prompt
Используйте re.split(), чтобы разделить "The rain in Spain" в месте каждого пробельного символа. Выведите полученный список.
Вывод: полная программа на Python

Пример

Разбейте строку только в месте первого пробельного символа:
Prompt
Используйте re.split(), чтобы разделить "The rain in Spain" только по первому вхождению (maxsplit=1). Выведите результат.
Вывод: полная программа на Python

Функция sub()

Функция sub() ставит выбранный вами текст на место каждого совпадения:

Параметр count ограничивает количество замен:

Пример

Поставьте число 9 на место каждого пробельного символа:
Prompt
Используйте re.sub(), чтобы заменить каждый пробельный символ на "9" в строке "The rain in Spain". Выведите результат.
Вывод: полная программа на Python

Пример

Замените только первые 2 пробельных символа:
Prompt
Используйте re.sub(), чтобы заменить первые 2 пробельных символа на "9" в строке "The rain in Spain". Выведите результат.
Вывод: полная программа на Python

Объект Match

Объект Match хранит сведения о поиске и о том, что было найдено.

Примечание: если совпадений нет, вы получаете значение None, а объекта Match нет вовсе.

Чтобы получить эти сведения, используйте свойства и методы объекта:

  • .span() даёт кортеж с позициями начала и конца совпадения
  • .string возвращает строку, которую вы передали в функцию
  • .group() возвращает совпавший текст

Пример

Выполните поиск, который создаёт объект Match:
Prompt
Используйте re.search(), чтобы найти "ai" в строке "The rain in Spain". Выведите возвращённый объект Match.
Вывод: полная программа на Python

Пример

Выведите начальную и конечную позиции первого совпадения:
Prompt
Найдите слово, начинающееся с "S", с помощью r"\bS\w+" в строке "The rain in Spain". Выведите позиции совпадения с помощью .span().
Вывод: полная программа на Python

Пример

Выведите строку, переданную в функцию:
Prompt
Найдите слово, начинающееся с "S", с помощью r"\bS\w+" в строке "The rain in Spain". Выведите исходную строку с помощью .string.
Вывод: полная программа на Python

Пример

Выведите только совпавший текст:
Prompt
Найдите слово, начинающееся с "S", с помощью r"\bS\w+" в строке "The rain in Spain". Выведите найденный текст с помощью .group().
Вывод: полная программа на Python