22.11. Синтаксис регулярного выражения
Синтаксис регулярных выражений в Python почти такой же, как
в других инструментах. Часть символов (в основном буквы и цифры)
обозначают сами себя. Строка удовлетворяет (соответствует) шабло-
ну, если она входит во множество строк, которые этот шаблон опи-
сывает. Различные операции используют шаблон по-разному. Так,
73
search() ищет первое вхождение строки, удовлетворяющей шаблону,
в заданной строке, a match() требует, чтобы строка удовлетворяла
шаблону с самого начала. Символы, имеющие специальное значение
в записи регулярных выражений, приведены ниже.
Символ Обозначение в регулярном выражении
"."
Любой символ
"^"
Начало строки
"$"
Конец строки
"*"
Повторение фрагмента нуль или более раз («жадное»)
"+"
Повторение фрагмента один или более раз («жадное»)
"?"
Предыдущий фрагмент либо присутствует, либо отсут-
ствует
"{m, n}" Повторение предыдущего фрагмента от m до n раз
включительно («жадное»)
"[...]"
Любой символ из набора в скобках. Можно задавать
диапазоны символов с идущими подряд кодами, напри-
мер: a-z
"[^... ]"
Любой символ не из набора в скобках
"\"
Обратная косая черта отменяет специальное значение
следующего за ней символа
"I"
Фрагмент справа или фрагмент слева
"* ?"
Повторение фрагмента нуль или более раз («нежадное»)
"+ ?"
Повторение фрагмента один или более раз («нежадное»)
"{m, n} ?" Повторение предыдущего фрагмента от m до n раз
включительно («нежадное»)
Если А и В – регулярные выражения, то их конкатенация АВ яв-
ляется новым регулярным выражением, причем конкатенация строк а
и b будет удовлетворять АВ, если а удовлетворяет А и b удовлетворя-
ет В. Можно считать, что конкатенация – основной способ составле-
ния регулярных выражений.
Скобки, описанные ниже, применяются для задания приорите-
тов и выделения групп (фрагментов текста, которые потом можно по-
лучить по номеру или из словаря и даже сослаться в том же регуляр-
ном выражении).
74
Алгоритм, который сопоставляет строки с регулярным выраже-
нием, проверяет соответствие того или иного фрагмента строки регу-
лярному выражению.
Например, строка "а" соответствует регулярному выражению
"[a-z]",строка "fruit" соответствует "fruitIvegetable", а вот строка "ap-
ple" не соответствует шаблону "pineapple".
В таблице вместо регвыр может быть записано регулярное выра-
жение, вместо имя – идентификатор, а флаги будут рассмотрены ниже.
Обозначение
Описание
1
2
" (регвыр)"
Обособляет регулярное выражение в скобках и
выделяет группу
" (? •.регвыр)"
Обособляет регулярное выражение в скобках
без выделения группы
" (?=регвыр)"
Просмотр вперед: строка должна соответство-
вать заданному регулярному выражению, но
дальнейшее сопоставление с шаблоном начнет-
ся с того же места
" (? !регвыр) "
То же, но с отрицанием соответствия
" (?<=регвыр)"
Просмотр назад: строка должна соответствовать
регулярному выражению. Не занимает места в
строке, к которой применяется шаблон. Пара-
метр регвыр должен быть фиксированной дли-
ны (то есть без "+" и "*")
" (?
То же, но с отрицанием соответствия
"(?р<имя>регвыр)" Выделяет именованную группу с именем <имя>
" (?Р=имя)"
Точно соответствует выделенной ранее имено-
ванной группе с именем <имя>
" (?#регвыр)"
Комментарий (игнорируется)
"(?(имя)рв1|рв2)"
Если группа с номером или именем <имя> ока-
залась определена, то результатом будет сопо-
ставление с рв1, иначе – с рв2. Часть рв2 может
отсутствовать
75
Окончание таблицы
1
2
" (? флаг)"
Задает флаг для всего данного регулярного вы-
ражения. Флаги необходимо задавать в начале
шаблона
В таблице описаны специальные последовательности, в которых
используется обратная косая черта.
Последовательность
Значение
1
2
"\1" – "\9"
Группа с указанным номером группы ну-
меруется начиная с 1
" \А"
Промежуток перед началом всей строки
(почти аналогично "^")
" \Z"
Промежуток перед концом всей строки
(почти аналогично " $")
" \b"
Промежуток между символами перед сло-
вом или после него
" \В"
Наоборот, не соответствует промежутку
между символами на границе слова
" \d"
Цифра (аналогично "[ 0 – 9 ]")
" \D"
Не цифра (аналогично "[" 0 – 9 ]")
" \s"
Любой пробельный символ (аналогично
"[\t\n\r\f\v]")
" \S"
Любой непробельный символ (аналогично
"[^t\n\r\f\v]")
"\w"
Любая цифра или буква (зависит от флага
LOCALE)
"\W"
Любой символ, не являющийся цифрой или
буквой (зависит от флага LOCALE)
76
Флаги, используемые с регулярными выражениями:
Обозначение
Описание
"(?i)", re.I,
re.IGNORECASE
Сопоставление проводится без учета регистра
букв
"(?L)", re.L,
re.LOCALE
Влияет на определение буквы в "\w", "\w", "\b",
"\B" в зависимости от текущей культурной сре-
ды (locale)
"(?m)", re.M,
re.MULTILINE
Если этот флаг задан, то " ^" и " $" соответствуют
началу и концу любой строки
"(?s)", re.S,
re.DOTALL
Если задан, то "." соответствует также и символу
конца строки " \n"
"(?x)", re.X,
re.VERBOSE
Если задан, то пробельные символы, не экрани-
рованные в шаблоне обратной косой чертой, яв-
ляются незначащими, а все, что расположено
после символа "#", – комментариями. Позволяет
записывать регулярное выражение в несколько
строк для улучшения его читаемости и записи
комментариев
"(?u)", re.U,
re.UNICODE
В шаблоне и в строке использован Unicode
Do'stlaringiz bilan baham: |