re — прості регулярні вирази#

Цей модуль реалізує операції з регулярними виразами. Підтримуваний синтаксис регулярних виразів є підмножиною модуля re CPython (і фактично є підмножиною розширених регулярних виразів POSIX).

Підтримувані оператори та спеціальні послідовності:

.

Збіг з будь-яким символом.

[...]

Збіг з набором символів. Підтримуються окремі символи та діапазони, включаючи заперечні набори (наприклад, [^a-c]).

^

Збіг з початком рядка.

$

Збіг з кінцем рядка.

?

Збіг з нулем або одним входженням попереднього підшаблону.

*

Збіг з нулем або більше входженнями попереднього підшаблону.

+

Збіг з одним або більше входженнями попереднього підшаблону.

??

Нежадібна версія ?: збіг з нулем або одним входженням, з перевагою нуля.

*?

Нежадібна версія *: збіг з нулем або більше входженнями, з перевагою найкоротшого збігу.

+?

Нежадібна версія +: збіг з одним або більше входженнями, з перевагою найкоротшого збігу.

|

Збіг або з лівим, або з правим підшаблоном цього оператора.

(...)

Групування. Кожна група є захоплюючою (підрядок, який вона захоплює, можна отримати методом match.group()).

(?:...)

Незахоплюючe групування. Кожна група збігається за тими самими правилами, що й звичайне групування, але не буде частиною об’єкта збігу.

\d

Збіг з цифрою. Еквівалентно [0-9].

\D

Збіг з нецифровим символом. Еквівалентно [^0-9].

\s

Збіг з пробільним символом. Еквівалентно [ \t-\r].

\S

Збіг з непробільним символом. Еквівалентно [^ \t-\r].

\w

Збіг з «символами слова» (лише ASCII). Еквівалентно [A-Za-z0-9_].

\W

Збіг з «несловесними символами» (лише ASCII). Еквівалентно [^A-Za-z0-9_].

\

Символ екранування. Будь-який інший символ після зворотного слеша, крім перелічених вище, сприймається буквально. Наприклад, \* еквівалентно буквальному * (не розглядається як оператор *). Зверніть увагу, що \r, \n тощо не обробляються особливим чином і будуть еквівалентні буквальним літерам r, n тощо. З цієї причини не рекомендується використовувати raw-рядки Python (r"") для регулярних виразів. Наприклад, r"\r\n" як регулярний вираз еквівалентно "rn". Щоб знайти символ CR, за яким слідує LF, використовуйте "\r\n".

НЕ ПІДТРИМУЄТЬСЯ:

  • лічені повторення ({m,n})

  • іменовані групи ((?P<name>...))

  • більш складні твердження (\b, \B)

  • екранування спеціальних символів на кшталт \r, \n — натомість використовуйте власне екранування Python

  • тощо.

Приклад:

import re

# As re doesn't support escapes itself, use of r"" strings is not
# recommended.
regex = re.compile("[\r\n]")

regex.split("line1\rline2\nline3\r\n")

# Result:
# ['line1', 'line2', 'line3', '', '']

Функції#

re.compile(regex_str: str, flags: int = 0) 'regex'#

Компілює регулярний вираз, повертає об’єкт regex.

re.search(regex_str: str, string: str) 'match | None'#

Компілює regex_str та шукає його в string. На відміну від match, ця функція шукає у рядку першу позицію, що відповідає регулярному виразу (яка все ж може бути 0, якщо вираз прив’язаний до початку).

re.sub(regex_str: str, replace: str | Callable, string: str, count: int = 0, flags: int = 0, /) str#

Компілює regex_str та шукає його в string, замінюючи всі збіги на replace і повертаючи новий рядок.

replace може бути рядком або функцією. Якщо це рядок, то escape-послідовності виду \<number> та \g<number> можна використовувати для підстановки відповідної групи (або порожнього рядка для незнайдених груп). Якщо replace є функцією, вона повинна приймати один аргумент (збіг) і повертати рядок заміни.

Якщо count задано і не дорівнює нулю, підстановка зупиниться після зазначеної кількості замін. Аргумент flags ігнорується.

Об’єкти Regex#

Скомпільований регулярний вираз. Екземпляри цього класу створюються за допомогою re.compile().

class re.regex

Скомпільований об’єкт регулярного виразу, що повертається функцією re.compile().

match(string: str, pos: int = 0, endpos: int | None = None) 'match | None'#

Застосовує скомпільований регулярний вираз до string, починаючи з початку області пошуку, і повертає об’єкт match або None, якщо вираз не збігається. Це еквівалент скомпільованого шаблону для рівня модуля match і значно ефективніший, коли один шаблон застосовується до кількох рядків.

Необов’язковий параметр pos задає індекс у string, з якого починається пошук; за замовчуванням дорівнює 0. Це не повністю еквівалентно зрізу рядка: символ шаблону '^' збігається з реальним початком рядка та з позиціями відразу після символу нового рядка, але не обов’язково з індексом початку пошуку.

Необов’язковий параметр endpos обмежує відстань пошуку в string; рядок поводиться так, ніби має довжину endpos символів, тому перевіряються лише символи від pos до endpos - 1. Якщо endpos дорівнює None (за замовчуванням), пошук ведеться по всьому рядку.

search(string: str, pos: int = 0, endpos: int | None = None) 'match | None'#

Сканує string у пошуку першої позиції, де скомпільований регулярний вираз дає збіг, і повертає об’єкт match або None, якщо збігів немає. Це еквівалент скомпільованого шаблону для функції рівня модуля search() і значно ефективніший, коли один шаблон застосовується до кількох рядків.

Необов’язковий параметр pos задає індекс у string, з якого починається пошук; за замовчуванням дорівнює 0. Це не повністю еквівалентно зрізу рядка: символ шаблону '^' збігається з реальним початком рядка та з позиціями відразу після символу нового рядка, але не обов’язково з індексом початку пошуку.

Необов’язковий параметр endpos обмежує відстань пошуку в string; рядок поводиться так, ніби має довжину endpos символів, тому перевіряються лише символи від pos до endpos - 1. Якщо endpos дорівнює None (за замовчуванням), пошук ведеться по всьому рядку.

sub(replace: str | Callable, string: str, count: int = 0, flags: int = 0, /) str#

Шукає скомпільований регулярний вираз у string, замінюючи всі збіги на replace, та повертає новий рядок. Це еквівалент скомпільованого шаблону для функції рівня модуля sub() і значно ефективніший, коли один шаблон застосовується до кількох рядків.

replace може бути рядком або функцією. Якщо це рядок, то escape-послідовності виду \<number> та \g<number> можна використовувати для підстановки відповідної групи (або порожнього рядка для незнайдених груп). Якщо replace є функцією, вона повинна приймати один аргумент (збіг) і повертати рядок заміни.

Якщо count задано і не дорівнює нулю, підстановка зупиниться після зазначеної кількості замін. Аргумент flags ігнорується.

split(string: str, max_split: int = -1, /) List[str]#

Розбиває string за допомогою регулярного виразу. Якщо задано max_split, це визначає максимальну кількість розбиттів. Повертає список рядків (може бути до max_split+1 елементів, якщо це значення задане).

Об’єкти збігу#

Об’єкт збігу містить результат успішного збігу.

class re.match(regex_str: str, string: str)#

Зіставляє regex_str з string, починаючи з початку рядка, і повертає об’єкт збігу або None, якщо збіг не знайдено. Це скорочення на рівні модуля: re.match(regex_str, string) еквівалентно re.compile(regex_str).match(string).

Той самий об’єкт збігу також повертається функцією search(), методами скомпільованого шаблону regex.match() / regex.search(), а також передається до функції заміни, що використовується в sub().

group(index: int) str#

Повертає рядок (або підрядок) збігу. index дорівнює 0 для всього збігу, 1 і вище — для кожної захоплюючої групи. Підтримуються лише числові групи.