Строки регулярных выражений строятся путем конкатенации односимвольных форм регулярных выражений, представленных в табл. 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}? |
То же, что *, + и ?, но соответствует минимально возможному числу совпадений; известны как ми ни маль- ные (нежадные) квантификаторы (в отличие от прочих, ищут и поглощают минимально возможное количество символов) |
[…] |
Определяет набор символов: например, [a—zA—Z] соответствует любой букве (альтернативы; символ — обозначает диапазон) |
["…] |
Определяет дополняющий набор символов: соответствует символам, отсутствующим в наборе |
Оператор |
Описание |
\ |
Экранирует специальные символы (например, *?+|()) и вводит специальные последовательности, представленные в табл. 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 |
Любой алфавитно-цифровой символ ([a—zA—Z0-9_] для ASCII) |
\W |
Любой не алфавитно-цифровой символ ([~a—zA—Z0-9_] для ASCII) |
\Z |
Соответствует только концу строки |
Большинство стандартных экранированных последовательностей, которые поддерживаются строковыми литерами Python, также принимаются механизмом анализа регулярных выражений: \a, \b, \f, \n, \r, \t, \v, \x и \\. В руководстве по стандартной библиотеке Python вы найдете описание этих экранированных последовательностей и дополнительные сведения о синтаксисе шаблонов в целом. Но чтобы продемонстрировать типичное использование интерфейсов модуля re, вернемся к программному коду.
Использованная литература:
Марк Лутц — Программирование на Python, 4-е издание, II том, 2011