Язык программирования Python
Шрифт:
«(?<=регвыр)» Взгляд назад: строка должна соответствовать, если до этого момента соответствует регулярному выражению. Не занимает места в строке, к которой применяется шаблон. Параметр регвыр должен быть фиксированной длины (то есть, без «+» и "*")
«(?<!регвыр)» То же, но с отрицанием соответствия
«(?P<имя>регвыр)» Выделяет именованную группу с именем имя
«(?P=имя)» Точно соответствует выделенной ранее именованной группе с именем имя
«(?#регвыр)» Комментарий (игнорируется)
«(?(имя)рв1|рв2)» Если
«(?флаг)» Задает флаг для всего данного регулярного выражения. Флаги необходимо задавать в начале шаблона
В таблице ниже описаны специальные последовательности, использующие обратную косую черту:
Последовательность Чему соответствует
"\1» — "\9» Группа с указанным номером. Группы нумеруются, начиная с 1
"\A» Промежуток перед началом всей строки (почти аналогично "^")
"\Z» Промежуток перед концом всей строки (почти аналогично "$")
"\b» Промежуток между символами перед словом или после него
"\B» Наоборот, не соответствует промежутку между символами на границе слова
"\d» Цифра. Аналогично «[0–9]»
"\s» Любой пробельный символ. Аналогично «[\t\n\r\f\v]»
"\S» Любой непробельный символ. Аналогично «[^\t\n\r\f\v]»
"\w» Любая цифра или буква (зависит от флага LOCALE)
"\W» Любой символ, не являющийся цифрой или буквой (зависит от флага LOCALE)
Флаги, используемые с регулярными выражениями:
Листинг
«(?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.
Методы объекта–шаблона
В результате успешной компиляции шаблона функцией re.compile получается шаблон–объект (он именуется SRE_Pattern), который имеет несколько методов, некоторые из них будут рассмотрены. Как обычно, подробности и информация о дополнительных аргументах — в документации по Python.
Листинг
match(s)
Сопоставляет строку s с шаблоном, возвращая в случае удачного сопоставления объект с результатом сравнения (объект SRE_Match). В случае неудачи возвращает None. Сопоставление начинается
от начала строки.Листинг
search(s)
Аналогичен match(s), но ищет подходящую подстроку по всей строке s.
Листинг
split(s[, maxsplit=0])
Разбивает строку на подстроки, разделенные подстроками, заданными шаблоном. Если в шаблоне выделены группы, они попадут в результирующий список, перемежаясь с подстроками между разделителями. Если указан maxsplit, будет произведено не более maxsplit разбиений.
Листинг
findall(s)
Ищет все неперекрывающиеся подстроки s, удовлетворяющие шаблону.
Листинг
finditer(s)
Возвращает итератор по объектам с результатами сравнения для всех неперекрывающихся подстрок, удовлетворяющих шаблону.
Листинг
sub(repl, s)
Заменяет в строке s все (или только count, если он задан) вхождения неперекрывающихся подстрок, удовлетворяющих шаблону, на строку, заданную с помощью repl. В качестве replможет выступать строка или функция. Возвращает строку с выполненными заменами. В первом случае строка repl подставляется не просто так, а интерпретируется с заменой вхождений "\номер» на группу с соответствующим номером и вхождений "\g<имя>" на группу с номером или именем имя. В случае, когда repl — функция, ей передается объект с результатом каждого успешного сопоставления, а из нее возвращается строка для замены.
Листинг
subn(repl, s)
Аналогичен sub, но возвращает кортеж из строки с выполненными заменами и числа замен.
В следующем примере строка разбивается на подстроки по заданному шаблону:
Листинг
>>> import re
>>> delim_re = re.compile(r»[:,;]»)
>>> text = «This,is;example»
>>> print delim_re.split(text)
['This', 'is', 'example']
А теперь можно узнать, чем именно были разбиты строки:
Листинг
>>> delim_re = re.compile(r»([:,;])»)
>>> print delim_re.split(text)
['This', ',', 'is', ';', 'example']
Примеры шаблонов
Владение регулярными выражениями может существенно ускорить построение алгоритмов для обработки данных. Лучше всего познакомиться с шаблонами на конкретных примерах:
Листинг
r»\b\w+\b»
Соответствует слову из букв и знаков подчеркивания.
Листинг
r»[+-]?\d+»
Соответствует целому числу. Возможно, со знаком.
Листинг
r»\([+-]?\d+\)»
Число, стоящее в скобках. Скобки используются в самих регулярных выражениях, поэтому они экранируются "\".
Листинг
r»[a–cA–C]{2}»
Соответствует строке из двух букв «a», «b» или «c». Например, «Ac», «CC», «bc».
Листинг
r»aa|bb|cc|AA|BB|CC»
Строка из двух одинаковых букв.
Листинг
r»([a–cA–C])\1»
Строка из двух одинаковых букв, но шаблон задан с использованием групп
Листинг
r»aa|bb».