1 of 24

РЕГУЛЯРНЫЕ ВЫРАЖЕНИЯ

Обработка текстов по шаблону в Python

2 of 24

Модуль re

  • Установлен в Python в качестве стандартного модуля.
  • re — очень мощная библиотека для работы с текстом. Если вы уже установили Python, модуль re доступен сразу, без дополнительной установки.
  • С помощью регулярных выражений решаются задачи поиска, замены и валидации текста!

2

3 of 24

Первый поиск по шаблону

Функция search ищет первое вхождение шаблона в строке. Если совпадение найдено, возвращается специальный объект Match.

3

4 of 24

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

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

Состоит из:

  • Обычных символов (буквы, цифры) — ищут сами себя
  • Метасимволов — служебные символы со специальным значением

Метасимволы: . ^ $ * + ? { } [ ] \ | ( )

4

5 of 24

Основные функции модуля re

5

Функция

Описание

search(pattern, string)

Ищет первое вхождение шаблона

match(pattern, string)

Ищет совпадение в начале строки

findall(pattern, string)

Находит все вхождения, возвращает список

finditer(pattern, string)

Итератор по всем вхождениям (объекты Match)

sub(pattern, repl, string)

Заменяет найденные фрагменты

split(pattern, string)

Разделяет строку по шаблону

compile(pattern)

Компилирует шаблон для многократного использования

6 of 24

Символьные классы

Позиционирование символов в шаблоне

6

Класс

Значение

Пример

[abc]

Один из символов a, b или c

[abc] найдет 'a' в "арбуз"

[a-z]

Любая латинская строчная буква

[a-z]+ найдет слово из латиницы

[0-9]

Любая цифра

[0-9]{3} найдет три цифры подряд

[а-яё]

Любая русская буква

[а-яё]+ найдет русское слово

[^abc]

Любой символ, кроме a, b или c

[^0-9] найдет не-цифру

7 of 24

Предопределенные множества

Параметры: сокращения для часто используемых классов

7

Символ

Значение

Эквивалент

\d

Любая цифра

[0-9]

\D

Любой нецифровой символ

[^0-9]

\w

Буква, цифра или подчеркивание

[a-zA-Z0-9_]

\W

Не буква, не цифра, не подчеркивание

[^a-zA-Z0-9_]

\s

Любой пробельный символ

[ \t\n\r\f\v]

\S

Непробельный символ

[^ \t\n\r\f\v]

.

Любой символ, кроме перевода строки

8 of 24

Квантификаторы

8

Сколько раз повторяется элемент?

Квантификатор

Значение

*

0 или более раз

+

1 или более раз

?

0 или 1 раз

{n}

Ровно n раз

{n,}

n или более раз

{n,m}

От n до m раз

9 of 24

Якоря и границы слов

9

Якоря указывают на позицию в строке, а не на символы:

  • ^ — начало строки
  • $ — конец строки
  • \b — граница слова
  • \B — не граница слова

Пример:

10 of 24

Группировка

10

Круглые скобки ( ) выполняют две задачи:

  1. Группировка — применение квантификаторов к группе
  2. Захват — сохранение части найденного текста

11 of 24

Обработка найденного

Текст, выведенный Label, нельзя редактировать!

11

12 of 24

Объект Match

Что мы получаем после search или match?

12

Метод

Что возвращает

group(0)

Всю найденную строку

group(1)

Первую захваченную группу

groups()

Кортеж всех захваченных групп

start()

Индекс начала вхождения

end()

Индекс конца вхождения

span()

Кортеж (start, end)

13 of 24

Флаги (модификаторы)

Флаги передаются как третий аргумент в функции re:

13

Флаг

Значение

re.IGNORECASE (re.I)

Игнорировать регистр

re.MULTILINE (re.M)

^ и $ работают для каждой строки

re.DOTALL (re.S)

Точка включает перевод строки

re.VERBOSE (re.X)

Шаблон с пробелами и комментариями

Пример:

14 of 24

Замена текста

14

Метод sub

С помощью re.sub можно не только заменять, но и удалять текст (замена на пустую строку).

15 of 24

Разделение строки

15

Метод split

Метод split разделяет строку по заданному шаблону, в отличие от обычного split(), который работает только с одним разделителем.

16 of 24

Компиляция шаблона

16

Для многократного использования

Компиляция ускоряет работу при многократном использовании одного шаблона.

17 of 24

Например: проверка email

17

18 of 24

Задача 1

Написать программу, которая:

■ Запрашивает у пользователя строку

■ Проверяет, содержит ли строка только цифры

■ Выводит "Да, это число", если строка состоит только из цифр, иначе "Нет, это не число"

2

19 of 24

Решение

19

20 of 24

Задача 2

Написать программу, которая:

■ Принимает на вход строку

■ Находит и выводит все слова, начинающиеся с заглавной буквы

■ Слова могут быть разделены пробелами, запятыми или точками

2

21 of 24

Решение

21

22 of 24

Еще примеры шаблонов

22

Что ищем

Шаблон

Номер телефона (РФ)

\+7 \d{3} \d{3}-\d{2}-\d{2}

Email

[\w.-]+@[\w.-]+\.[a-z]{2,}

Дата (ДД.ММ.ГГГГ)

\d{2}\.\d{2}\.\d{4}

IP-адрес

\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}

Слова из 5 букв

\b\w{5}\b

HEX-цвет (#RGB)

#[0-9A-Fa-f]{6}

23 of 24

Полезные ресурсы:

23

■ Regex101 — онлайн-конструктор и отладчик regex

https://regex101.com/

■ Документация Python re

https://docs.python.org/3/library/re.html

■ Шпаргалка по регулярным выражениям

(можно найти в интернете по запросу "regex cheatsheet")

24 of 24

СПАСИБО ЗА ВНИМАНИЕ!

29