Добрый день. Я сейчас прохожу курс повышения квалификации - "Профессиональное веб-программирование". Мне нужно получить диплом по этому курсу. Я так полагаю нужно его оплатить чтобы получить диплом о повышении квалификации. Как мне оплатить этот курс?
|
Обработка текстов. Регулярные выражения. Unicode
Регулярные выражения
Рассмотренных стандартных возможностей для работы с текстом достаточно далеко не всегда. Например, в методах find() и replace() задается всего одна строка. В реальных задачах такая однозначность встречается довольно редко, чаще требуется найти или заменить строки, отвечающие некоторому шаблону.
Регулярные выражения (regular expressions) описывают множество строк, используя специальный язык, который сейчас и будет рассмотрен. (Строка, в которой задано регулярное выражение, будет называться шаблоном.)
Для работы с регулярными выражениями в Python используется модуль re. В следующем примере регулярное выражение помогает выделить из текста все числа:
>>> import re >>> pattern = r"[0-9]+" >>> number_re = re.compile(pattern) >>> number_re.findall("122 234 65435") ['122', '234', '65435']
В этом примере шаблон pattern описывает множество строк, которые состоят из одного или более символов из набора "0", "1" , ..., "9" . Функция re.compile() компилирует шаблон в специальный Regex-объект, который имеет несколько методов, в том числе метод findall() для получения списка всех непересекающихся вхождений строк, удовлетворяющих шаблону, в заданную строку.
То же самое можно было сделать и так:
>>> import re >>> re.findall(r"[0-9]+", "122 234 65435") ['122', '234', '65435']
Предварительная компиляция шаблона предпочтительнее при его частом использовании, особенно внутри цикла.
Примечание: Следует заметить, что для задания шаблона использована необработанная строка. В данном примере она не требовалась, но в общем случае лучше записывать строковые литералы именно так, чтобы исключить влияние специальных последовательностей, записываемых через обратную косую черту. |
Синтаксис регулярного выражения
Синтаксис регулярных выражений в Python почти такой же, как в Perl, grep и некоторых других инструментах. Часть символов (в основном буквы и цифры) обозначают сами себя. Строка удовлетворяет (соответствует) шаблону, если она входит во множество строк, которые этот шаблон описывает.
Здесь стоит также отметить, что различные операции используют шаблон по-разному. Так, search() ищет первое вхождение строки, удовлетворяющей шаблону, в заданной строке, а match() требует, чтобы строка удовлетворяла шаблону с самого начала.
Символы, имеющие специальное значение в записи регулярных выражений:
Если A и B - регулярные выражения, то их конкатенация AB является новым регулярным выражением, причем конкатенация строк a и b будет удовлетворять AB, если a удовлетворяет A и b удовлетворяет B. Можно считать, что конкатенация - основной способ составления регулярных выражений.
Скобки, описанные ниже, применяются для задания приоритетов и выделения групп (фрагментов текста, которые потом можно получить по номеру или из словаря, и даже сослаться в том же регулярном выражении).
Алгоритм, который сопоставляет строки с регулярным выражением, проверяет соответствие того или иного фрагмента строки регулярному выражению. Например, строка "a" соответствует регулярному выражению "[a-z]", строка "fruit" соответствует "fruit|vegetable", а вот строка "apple" не соответствует шаблону "pineapple".
В таблице ниже вместо регвыр может быть записано регулярное выражение, вместо имя - идентификатор, а флаги будут рассмотрены ниже.
Обозначение | Описание |
---|---|
"(регвыр)" | Обособляет регулярное выражение в скобках и выделяет группу |
"(?:регвыр)" | Обособляет регулярное выражение в скобках без выделения группы |
"(?=регвыр)" | Взгляд вперед: строка должна соответствовать заданному регулярному выражению, но дальнейшее сопоставление с шаблоном начнется с того же места |
"(?!регвыр)" | То же, но с отрицанием соответствия |
"(?<=регвыр)" | Взгляд назад: строка должна соответствовать, если до этого момента соответствует регулярному выражению. Не занимает места в строке, к которой применяется шаблон. Параметр регвыр должен быть фиксированной длины (то есть, без "+" и "*" ) |
"(?<!регвыр)" | То же, но с отрицанием соответствия |
"(?P<имя>регвыр)" | Выделяет именованную группу с именем имя |
"(?P=имя)" | Точно соответствует выделенной ранее именованной группе с именем имя |
"(?#регвыр)" | Комментарий (игнорируется) |
"(?(имя)рв1|рв2)" | Если группа с номером или именем имя оказалась определена, результатом будет сопоставление с рв1, иначе - c рв2. Часть |рв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.