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 ігнорується.
Об’єкти збігу¶
Об’єкт збігу містить результат успішного збігу.
- 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().