7.61M
Category: programmingprogramming

Регулярные выражения

1.

Регулярные
выражения

2.

Определение
• Регулярное выражение — это строка, задающая шаблон поиска
подстрок в тексте. Одному шаблону может соответствовать много
разных строчек. Термин «Регулярные выражения» является
переводом английского словосочетания «Regular expressions».
Перевод не очень точно отражает смысл, правильнее было бы
«шаблонные выражения». Регулярное выражение, или коротко
«регулярка», состоит из обычных символов и специальных командных
последовательностей. Например, \d задаёт любую цифру, а \d+ —
задает любую последовательность из одной или более цифр. Работа с
регулярками реализована во всех современных языках
программирования. Однако существует несколько «диалектов»,
поэтому функционал регулярных выражений может различаться от
языка к языку. В некоторых языках программирования регулярками
пользоваться очень удобно (например, в питоне), в некоторых — не
слишком (например, в C++).

3.

Якоря
• Якоря используются когда регулярное
выражение нужно в начале предложения,
например если мы хотим найти слово
«Привет» в начале предложения мы
используем ^

4.

Границы слов
• Например нахождение всех слов
которые заканчиваются на Py

5.

Условие «Или»
• Вертикальная черта «|» отвечает за условие
«или» означает, что у нас в строке на примере
должны быть либо слово привет, либо слова
пока, либо они одновременно

6.

Скобочные выражения
• Внутри [] скобок используется перечисление
символов внутри них. Для того чтобы не
перечислять множество символов так же
используют range или же отрезок, т.е [0-9] =
[0123456789]

7.

Скобочные выражения
• Так же существует отрицание
выражений, для этого символ ^
помещается в range [^…]

8.

Классы символов
• Для выражений
существуют
разного рода
специальные
сокращения

9.

Квантификаторы
• Для нашей регулярки можно указать количество
вхождений через {min}, {max} в фигурных скобках
• Например в данном
выражении у нас от
0 до 9 цифр, если
написать {3} то
регулярка будет
искать 3 любых
цифры подряд, в
третьем же случае
{3, 5} будет искать от
трёх до пяти

10.

Квантификаторы
• У квантификатора есть удобные
сокращения, а именно:

11.

Экранирование
Как мы знаем, в регулярках + * ? {} () \
являются специальными символами, а
раз они зарезервированы системой то
есть другой способ для поиска
специальных символов в тексте, если
мы хотим к примеру найти символ «?»,
то его необходимо экранировать при
помощи обратного слеша (\), пример
экранирование есть ниже:
Рассмотрим один из примеров экранирования,
в частости регулярку ниже. В ней мы пытаемся
вывести все числа из текста.
\+ - это поиск символа «+»
| - это условие «или»
\- это поиск символа «-»
? – это означает «от нуля до одного появления»
\d – это любая цифра
+ (\d+) – сокращение, указывающее количество
символов от одного до бесконечности

12.

Экранирование
• Рассмотрим один из примеров экранирования, в частости регулярку
ниже. В ней мы пытаемся вывести все числа из текста.
• \+ - это поиск символа «+»
• | - это условие «или»
• \- это поиск символа «-»
• ? – это означает «от нуля до одного появления»
• \d – это любая цифра
• + (\d+) – сокращение, указывающее количество символов от одного до
бесконечности

13.

Группы
• Выражение можно объединять в группы при
помощи круглых скобок
Группы автоматически сортируются для того
чтобы избежать несостыковок и видеть
результат определенной группы
Само регулярное вырежние имеет группу 0,
каждое последующее на один больше

14.

Группы
• Выражение можно объединять в группы при
помощи круглых скобок
Группе можно задать номер, в данном
примере
\1 – означает скопировать содержимое
с указанным номером (в частности msi,
поэтому на выходе получается msi.msi)
• Самая часто используемая
регулярка группы, означающая
«любой текст»

15.

Жадный и ленивый поиск
• В данном примере
Жадный поиск ищет все
что идет до самого
последнего появления
скобки, в тоже время
Ленивый поиск
прекращает поиск
после первого
появления
закрывающей скобки

16.

Опережающие и ретроспективные
проверки
• Опережающие проверки
имеют такой вид и дают
условие «Найти x, при
условии что за ним идет
y», например найти все
числа после которых
идет знак доллара

17.

Регулярки в Python
• Для использования регулярок на Питоне
используется библиотека re (есть по умолчанию)
• Функции Python:
• Поиск подстроки в строке – search/match
• Поиск всех подходящих строк – findall/finditer
• Разделение строки на подстроки – split
• Замена части строки - sub

18.

Пример использования всех строк

19.

Кратко о функциях (Python)

20.

Match.group()
• Используется для нахождения в регулярках необходимой
группы например для вывода оттуда значений

21.

Метод re.search()
• re.search() возвращает совпадающую часть строки и
останавливается сразу же, как находит первое совпадение,
если шаблон не найдет возвращается None

22.

Метод re.match()
• re.match() поиск происходит в начале строки ,
чаще всего используют для того чтобы что-либо
проверить на соответствие

23.

Метод re.sub()
• re.sub() в данном
методе шаблон
сопоставляется с
заданной строкой
и если подстрока
найдена она
заменяется на
переданную нами
другую строку

24.

Метод re.sub()

25.

Метод re.split()
• re.split() разделяет строку на части
опираясь на символ-разделитель

26.

Метод re.split()

27.

Метод re.findall()
• re.findall() возвращает все совпадения с
шаблоном которые встречаются в строке. При
этом строка проверяется от начала и до конца,
совпадения возвращаются в том порядке в
котором они идут в исходной строке.
Возвращаемое значение может быть либо
списком строк, совпавшим с шаблоном, либо
пустым списком если совпадений не нашлось.

28.

Метод re.findall()

29.

Метод re.findall()

30.

Метод re.finditer()
• re.finditer() аналог findall() но возвращает список объектов match
(совпадений), а не строк, что позволяет нам работать с группами (group)

31.

Метод re.finditer()

32.

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

33.

Метод re.compile()

34.

Флаги
• Флаги используются для того чтобы настроить регулярные
выражения определенным образом, к примеру флаг «I»
отключает чувствительность к регистру символов.
• Флаги можно записать двумя способами, либо в
начале (?i) как пример, либо в конце через re.I
(re.your_flag)

35.

Флаги

36.

Определение

37.

Полезные ссылки:
Статья на habr
Книга о регулярных выражениях
regex101.com (чтобы создавать регулярки)
Функции в Python с регулярками
English     Русский Rules