re — простые регулярные выражения¶
Этот модуль реализует операции с регулярными выражениями. Поддерживаемый синтаксис регулярных выражений представляет собой подмножество модуля re из CPython (и фактически является подмножеством расширенных регулярных выражений POSIX).
Поддерживаемые операторы и специальные последовательности:
.Соответствует любому символу.
[...]Соответствует набору символов. Поддерживаются отдельные символы и диапазоны, включая инвертированные наборы (например,
[^a-c]).^Соответствует началу строки.
$Соответствует концу строки.
?Соответствует нулю или одному вхождению предыдущего подшаблона.
*Соответствует нулю или более вхождениям предыдущего подшаблона.
+Соответствует одному или более вхождениям предыдущего подшаблона.
??Нежадная версия
?, соответствует нулю или одному вхождению, с предпочтением нуля.*?Нежадная версия
*, соответствует нулю или более вхождениям, с предпочтением наименьшего соответствия.+?Нежадная версия
+, соответствует одному или более вхождениям, с предпочтением наименьшего соответствия.|Соответствует либо левому, либо правому подшаблону этого оператора.
(...)Группировка. Каждая группа является захватывающей (захваченную ею подстроку можно получить с помощью метода
match.group()).(?:...)Незахватывающая группировка. Каждая группа сопоставляется по тем же правилам, что и обычная группировка, но не будет частью объекта соответствия.
\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и т. д. Из-за этого не рекомендуется использовать сырые строки 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 игнорируется.
Объекты регулярных выражений¶
Скомпилированное регулярное выражение. Экземпляры этого класса создаются с помощью 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().