Шаблоны регулярных выражений Python

shablony regulyarnyh vyrazhenij python Текст и язык

Строки регулярных выражений строятся путем конкатенации односимвольных форм регулярных выражений, представленных в табл. 19.1. Обычно для каждой формы отыскивается самое длинное совпадение, за исключением минимальных операторов. В таблице символ R означает любое регулярное выражение, C обозначает символ, а N обозначает цифру.

Табли ца 19.1. Син так сис шабло нов re

Оператор

Описание

.

Соответствует любому символу (включая перевод строки, если установлен флаг DOTALL или перед точкой стоит конструкция (?s))

Соответствует началу строки (каждой строки в режиме MULTILINE)

$

Соответствует концу строки (каждой строки в режиме

MULTILINE)

C

Любой неспециальный (или экранированный обратным слэшем) символ соответствует самому себе

R*

Ноль или более совпадений с предшествующим регулярным выражением R (как можно больше)

R+

Одно или более совпадений с предшествующим регулярным выражением R (как можно больше)

R?

Ноль или одно совпадение с предшествующим регулярным выражением R (необязательное)

R{m}

Точное число m совпадений с предшествующим регулярным выражением R: a{5} соответствует подстроке aaaaa

R{m,n}

От m до n совпадений с предшествующим регулярным выражением R

R*?, R+?, R??, R{m,n}?

То же, что *, + и ?, но соответствует минимально возможному числу совпадений; известны как ми ни маль- ные (нежадные) квантификаторы (в отличие от прочих, ищут и поглощают минимально возможное количество символов)

[…]

Определяет набор символов: например, [azAZ] соответствует любой букве (альтернативы; символ обозначает диапазон)

["…]

Определяет дополняющий набор символов: соответствует символам, отсутствующим в наборе


 

Оператор

Описание

\

Экранирует специальные символы (например, *?+|()) и вводит специальные последовательности, представленные в табл. 19.2

\\

Соответствует литералу \ (в шаблоне записывается как \\\\ или используйте r‘\\’)

\N

Соответствует содержимому группы с номером N: ‘(.+) \1’ совпадет со строкой "42 42"

R|R

Альтернатива: соответствие левому или правому выражению R

RR

Конкатенация: соответствие обоим выражениям R

(R)

Соответствует любому выражению R внутри () и создает группу (сохраняет совпавшую подстроку)

(?:R)

То же, что и (R), но просто отделяет часть регулярного выражения и не создает сохраняющую группу

(?=R)

Опережающая проверка: соответствует, если имеется совпадение R с символами строки, следующими далее, но не поглощает их (например, X (?=Y) соответствует символу X, только если за ним следует символ Y)

(?!R)

Соответствует, если выражение R не соответствует символам, следующим далее; проверка, обратная по отношению к (?=R)

(?P<name>R)

Соответствует любому регулярному выражению R в () и создает именованную группу

(?P=name)

Соответствует тексту, найденному предшествующей группой с именем name

(?#…)

Комментарий; игнорируется

(?letter)

Флаг режима; letter может иметь значение а, i, L, m, s, u, x (смотрите руководство по библиотеке)

(?<=R)

Ретроспективная проверка: соответствует, если текущей позиции в строке предшествует совпадение с выражением R, завершающееся в текущей позиции

(?<!R)

Соответствует, если текущей позиции в строке не предшествует совпадение с выражением R; проверка, обратная по отношению к (?<=R)

(?(id/name/yespattern| nopattern)

Пытается отыскать совпадение с шаблоном yespattern, если существует группа с номером id или именем name; иначе используется шаблон nopattern

 

Внутри шаблонов можно сочетать диапазоны и символы. Например, [a- zA-Z0-9_]+ соответствует самой длинной строке из одного или более символов букв, цифр или подчеркиваний. Специальные символы преобразуются как обычно в строках Python: [\t ]* соответствует нулю или более табуляций и пробелов (то есть пропускаются пробельные символы).

Конструкция группировки с помощью круглых скобок, (R), позволяет извлекать совпавшие подстроки после успешного поиска соответствия. Часть строки, соответствующая выражению в круглых скобках, сохраняется в нумерованном регистре. Доступ к ней после успешного поиска производится с помощью метода group объекта соответствия.

Помимо конструкций, описанных в этой таблице, в шаблонах можно также использовать специальные последовательности, представленные в табл. 19.2. В соответствии с правилами Python для строк иногда нужно удваивать символ обратного слэша (\\) или пользоваться необработанными строками Python (r’…’), чтобы сохранить обратные слэши в шаблоне. Интерпретатор игнорирует обратные слэши в обычных строках, если следующий за ним символ не имеет специального значения. Некоторые последовательности в табл. 19.2 учитывают особенности Юникода, когда в сопоставлении участвуют строки str, а не bytes, а с целью эмуляции поведения для строк bytes можно использовать флаг ASCII; за подробностями обращайтесь к руководству по библиотеке Python.

Табли ца 19.2. Спе ци аль ные по сле до ва тель но сти re

Последовательность

Описание

\число

Соответствует содержимому группы с номером число (нумерация начинается с 1)

\A

Соответствует только началу строки

\b

Пустая строка на границе слова

\B

Пустая строка не на границе слова

\d

Любая десятичная цифра ([0-9] для ASCII)

\D

Любой символ, не являющийся десятичной цифрой

( для ASCII)

\s

Любой пробельный символ ([ \t\n\r\f\v] для ASCII)

\S

Любой непробельный символ ([" \t\n\r\f\v] для ASCII)

\w

Любой алфавитно-цифровой символ ([azAZ0-9_] для

ASCII)

\W

Любой не алфавитно-цифровой символ ([~azAZ0-9_] для ASCII)

\Z

Соответствует только концу строки

 

Большинство стандартных экранированных последовательностей, которые поддерживаются строковыми литерами Python, также принимаются механизмом анализа регулярных выражений: \a, \b, \f, \n, \r, \t, \v, \x и \\. В руководстве по стандартной библиотеке Python вы найдете описание этих экранированных последовательностей и дополнительные сведения о синтаксисе шаблонов в целом. Но чтобы продемонстрировать типичное использование интерфейсов модуля re, вернемся к программному коду.

Использованная литература:

Марк Лутц — Программирование на Python, 4-е издание, II том, 2011

Каталог сайтов Всего.ру
Оцените статью
Секреты программирования
Добавить комментарий