Последние новости:

Поиск по сайту:

В одиночестве каждый видит в себе то, что он есть на самом деле (А. Шопенгауэр).

Python 3 — Регулярные выражения

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (2 оценок, среднее: 5,00 из 5)
Загрузка...
15.11.2017
Python 3 - Регулярные выражения

Регулярное выражение  —  это специальная последовательность символов, которая позволяет соответствовать или найти другие строки или наборы строк, используя специализированный синтаксис проведен в шаблоне. Регулярные выражения широко используются в мире UNIX.

Модуль re обеспечивает полную поддержку Perl-подобных регулярных выражений в Python. Модуль re вызывает исключение re.error, если произошла ошибка во время компиляции или с помощью регулярного выражения.

Мы охватим две важные функции, которые будут использоваться для обработки регулярных выражений. Тем не менее, одна небольшая вещь: Есть различные символы, которые будут иметь особое значение, когда они используются в регулярном выражении. Во избежание путаницы при работе с регулярными выражениями, мы будем использовать строки Raw как r’expression’.

Основные модели, которые соответствуют одиночным символам

Выражение & Соответствие
1a, X, 9, < — обычные символы просто соответствуют сами себе точно.
2. (a period) — соответствует любому символу, за исключением символа новой строки «\n»
3\w — соответствует символу «слово»: букве или цифры или подчеркиванию [A-Za-z0-9_].
4\W — соответствует любому символу, кроме буквы.
5\b — граница между словом и несловообразующим
6\s — соответствует одному символу пробела — пробел, перевод строки, возврат, вкладка
7\S — соответствует любому символу.
8\t, \n, \r — табуляции, новая строка, возврат
9\d — десятичная цифра [0-9]
10^ — соответствует началу строки
11$ — соответствует концу строки
12\ — блокирует «особость» символа.

Флаги компиляции

Флаги компиляции позволяют изменить некоторые аспекты того, как работают регулярные выражения. Флаги доступны в модуле re под двумя именами, длинное имя, например, как IGNORECASE и короткое, в одно-буквенном виде, такие как I.

Флаг и Значение
1ASCII, A — Делает несколько побегов, как \w, \b, \s и \d. Сравнение только для ASCII символов с соответствующим свойством.
2DOTALL, S — Сделает, соответствует любому символу, включая символ новой строки
3IGNORECASE, I — Сравнение регистронезависимых символов
4LOCALE, L — Локальное сравнение
5MULTILINE, M — Сравнение многострочных, используя ^ и $
6VERBOSE, X (for ‘extended’) — Включить многословные REs, которые могут быть организованы более чисто и понятно

Функция match

Эта функция пытается соответствовать RE pattern для string с дополнительными flags.

Синтаксис этой функции:

re.match(pattern, string, flags = 0)

 

Вот описание параметров:

Параметр & Описание
1pattern — Это регулярное выражение, которому необходимо соответствовать.
2string — Это строка, которая будет искать, чтобы соответствовать шаблону в начале строки.
3flags — Вы можете задать различные флаги с помощью побитового OR (|). Это модификаторы, которые перечислены в таблице ниже.

 

Функция Re.match возвращает объект match если успех, и None если провал. Мы используем функции usegroup(num) или groups() объекта match, чтобы получить согласованное выражение.

Метод соответствия объекта и описание
1group(num = 0) — Этот метод возвращает все сравнения (или конкретную подгруппу num)
2groups() — Этот метод возвращает все соответствующие подгруппы в кортеже (пусто, если не найдено)

Пример

#!/usr/bin/python3
import re

line = "Кошки умнее собак"

matchObj = re.match( r'(.*) are (.*?) .*', line, re.M|re.I)

if matchObj:
   print ("matchObj.group() : ", matchObj.group())
   print ("matchObj.group(1) : ", matchObj.group(1))
   print ("matchObj.group(2) : ", matchObj.group(2))
else:
   print ("Нет совпадения!!")

 

Когда этот код выполнится, он выведет следующий результат:

matchObj.group() :  Кошки умнее собак
matchObj.group(1) :  Кошки
matchObj.group(2) :  умнее

Функция search

Эта функция ищет первое вхождение pattern re в string с дополнительными flags.

Синтаксис этой функции:

re.search(pattern, string, flags = 0)

 

Вот описание параметров:

Параметр & Описание
1pattern — Это регулярное выражение, которому необходимо соответствовать.
2string — Это строка, которая будет искать, чтобы соответствовать шаблону в любом месте строки.
3flags — Вы можете задать различные флаги с помощью побитового OR (|). Эти модификаторы, которые перечислены в таблице ниже.

Функция Re.search возвращает объект match если успех, и None если провал. Мы используем функцию group(num) или groups() объекта match, чтобы получить совпадающее выражение.

Метод соответствия объекта и описание
1group(num = 0) — Этот метод возвращает все сравнения (или конкретную подгруппу num)
2groups() — Этот метод возвращает все соответствующие подгруппе в кортеже (пусто, если не найдено)

Пример

#!/usr/bin/python3
import re

line = "Кошки умнее собак";

searchObj = re.search( r'(.*) are (.*?) .*', line, re.M|re.I)

if searchObj:
   print ("searchObj.group() : ", searchObj.group())
   print ("searchObj.group(1) : ", searchObj.group(1))
   print ("searchObj.group(2) : ", searchObj.group(2))
else:
   print ("Ничего не найдено!!")

 

Когда этот код выполнится, он выведет следующий результат:

matchObj.group() :  Кошки умнее собак
matchObj.group(1) :  Кошки
matchObj.group(2) :  умнее

Соответствие поиску версий

Python предлагает две различные примитивные операции, основанные на регулярных выражениях: match проверка на сравнение только в начале строки, в то время как search проверка на сравнение где — нибудь в строке (это то, что Perl делает по умолчанию).

Пример

#!/usr/bin/python3
import re

line = "Кошки умнее собак";

matchObj = re.match( r'собак', line, re.M|re.I)
if matchObj:
   print ("match --> matchObj.group() : ", matchObj.group())
else:
   print ("Нет совпадения!!")

searchObj = re.search( r'собак', line, re.M|re.I)
if searchObj:
   print ("search --> searchObj.group() : ", searchObj.group())
else:
   print ("Ничего не найдено!!")

 

Когда этот код выполнится, он выведет следующий результат:

Нет совпадения!!
search --> matchObj.group() :  собак

Поиск и замена

Одним из наиболее важных методов re, которые используют регулярные выражения является sub.

Синтаксис

re.sub(pattern, repl, string, max=0)

 

Этот метод заменяет все вхождения RE pattern в string на repl, заменив все вхождения, если max не предусмотрен. Этот метод возвращает модифицированную строку.

Пример

#!/usr/bin/python3
import re

phone = "2004-959-559 # Это номер телефона"

# Удаление комментариев в стиле Python
num = re.sub(r'#.*$', "", phone)
print ("Номер телефона : ", num)

# Удалить все, кроме цифр
num = re.sub(r'\D', "", phone)    
print ("Номер телефона : ", num)

 

Когда этот код выполнится, он выведет следующий результат:

Номер телефона :  2004-959-559
Номер телефона :  2004959559

Модификаторы регулярных выражений: Вариант flag

Регулярное выражение константы могут включать в себя необязательный модификатор для управления различными аспектами сравнения. Модификаторы указаны в качестве дополнительного флага. Вы можете предоставить несколько модификаторов с помощью исключающего OR (|), как показано выше, и может быть представлена ​​одним из следующих:

Модификатор & Описание
1re.I — Выполняет регистронезависимое согласование.
2re.L — Интерпретирует слова в соответствии с текущей локализацией. Эта интерпретация влияет на алфавитную группу (\w и \W), а также слово граничное поведение (\b и \В).
3re.M — Заставляет $ соответствует концу строки (а не только конец строки) и делает ^ совпадать с началом любой строки (а не только в начале строки).
4re.S — Делает период (точка) соответствовать любому символу, включая символ новой строки.
5re.U — Интерпретирует буквы в соответствии с набором символов Юникода. Этот флаг влияет на поведение \w, \W, \b, \B.
6re.X — Разрешает «cuter» синтаксис регулярных выражений. Он игнорирует пробелы (за исключением внутри множества [] или при замаскированой обратной косой чертой) и рассматривает неэкранированный # как маркер комментарий.

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

За исключением управляющих символов, (+ ? . * ^ $ ( ) [ ] { } | \), все символы совпадают сами. Вы можете избежать управляющего символа, предварив его с обратной косой чертой.

В следующей таблице перечислен синтаксис регулярных выражений, который доступен в Python:

Примеры регулярных выражений

Буквенные символы

Пример & Описание
1python — Сравнение «python».

Классы символов

Пример & Описание
1[Рр]ython — Сравнение «Python» или «python»
2rub[ye] — Сравнение «ruby» или «rube»
3[aeiou] — Соответствует любому одной строчной гласной
4[0-9] — Сравнение любой цифры; такой же, как [0123456789]
5[a-z] — Соответствует любому строчной букве ASCII
6[A-Z] — Сравнение любой заглавной букве ASCII
7[a-zA-Z0-9]  — Сравнение любой из вышеперечисленных
8[^aeiou] — Сравнение ничего, кроме нижнего регистра гласной
9[^0-9] — Сравнение ничего, кроме цифр

Специальные классы символов

Пример & Описание
1. — Соответствует любому символу, кроме символа новой строки
2\ d — Сравнение цифры: [0-9]
3\D — Сравнение не цифры: [^ 0-9]
4\s — Сравнение символа пробела: [\t\r\n\f]
5\S — Сравнение без пробела: [^ \t\r\n\f]
6\w — Сравнение одного текстового символа: [A-Za-z0-9_]
7\W — Сравнение несловесным символом: [^ A-Za-z0-9_]

Случаи повторения

Пример & Описание
1ruby? — Совпадение «rub» или «ruby»: у — необязательно
2ruby* — Совпадение «rub» плюс 0 или более y.
3ruby+ — Совпадение «rub» плюс 1 или более y.
4\d{3,} — Совпадение ровно 3 цифры
5\d{3} — Совпадение 3 или более цифр
6\d{3,5} — Совпадение 3, 4 или 5 цифр

Ненасытное повторение

Это соответствует наименьшее количество повторений:

Пример & Описание
1<.*> — Жадное повторение: matches «<python>Perl>»
2<.*?> — Из жадного в нежадный: matches «<python>» в «<python>Perl>»

Группировка с круглой скобкой

Пример & Описание
1\D\d+ — Ни одна из групп: + повторяется \d
2(\D\d)+ — Сгруппированные: + повторяет пару \D\d
3([Pp]ython(,)?)+ — Сравнение «Python», «Python, python, python» и т.д.

Обратные

Это соответствует ранее согласованной группе:

Пример & Описание
1([Pp])ython&\1ails — Сравнение python&pails или Python&Pails
2([‘»])[^\1]*\1 — Одинарные- или двойные кавычки в строке. \1 — соответствует то, что в 1-й группе подобраны. \2 — Сравнение, что во 2-й группе соответствовал, и т. д.

Альтернативы

Пример & Описание
1python|perl — Сравнение «python» или «perl»
2rub(y|le) — Сравнение «ruby» или «ruble»
3Python(!+|\?) — «Python», а затем один или более! или один?

Якоря

Необходимо для определения позиции соответствия.

Пример & Описание
1^Python — Сравнение «Python» в начале строки или внутренней линии
2Python$ — Сравнение «Python» в конце строки или строки
3\APython — Сравнение «Python» в начале строки
4Python\Z — Сравнение «Python» в конце строки
5\bPython\b — Сравнение «Python» на границе слова
6\brub\B — \В является не словесной границей: Сравнение «rub» в «rube» и «ruby», но не в одиночку
7Python(?=!) — Сравнение «Python», если за ними следует восклицательным.
8Python(?!!) — Сравнение «Python», если не последует восклицательный знак.

Специальный синтаксис со скобками

Пример & Описание
1R(?#comment) — Сравнение «R». Все остальное является комментарием
2R(?i)uby — Без учета регистра при сопоставлении «uby»
3R(?i:uby) — То же самое, что и выше
4rub(?:y|le)) — Группировать только без создания обратной связи \1

 

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Если статья понравилась, то поделитесь ей в социальных сетях:

Читайте также

5 1 голос
Рейтинг статьи
Подписаться
Уведомить о
guest

**ссылки nofollow

0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии

Статьи партнеров:

0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам:

Заполните форму и наш менеджер перезвонит Вам в самое ближайшее время!

badge
Обратный звонок 1
Отправить

Спасибо! Ваша заявка принята

close

Спасибо! Ваша заявка принята

close