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

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

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

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

Основные шаблоны, соответствующие одиночным символам

Sr. No. Выражение и совпадения
1

a, 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.

Sr. No. Флаг и значение
1

ASCII, A

Делает несколько экранирований, таких как \ w, \ b, \ s и \ d, совпадающими только с символами ASCII с соответствующим свойством.

2

DOTALL, S

Сделайте, сопоставьте любой символ, включая символы новой строки

3

IGNORECASE, I

Делать совпадения без учета регистра

4

LOCALE, L

Сделайте соответствие с учетом локали

5

MULTILINE, M

Многострочное сопоставление, затрагивающее ^ и $

6

VERBOSE, X (for ‘extended’)

Включите подробные RE, которые могут быть организованы более четко и понятно

Функция соответствия

Эта функция пытается сопоставить шаблон RE со строкой с необязательными флагами .

Вот синтаксис этой функции -

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

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

Sr. No. Параметр и описание
1

pattern

Это регулярное выражение, которое нужно сопоставить.

2

string

Это строка, в которой будет выполняться поиск по шаблону в начале строки.

3

flags

Вы можете указать разные флаги, используя побитовое ИЛИ (|). Это модификаторы, которые перечислены в таблице ниже.

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

Sr. No. Метод сопоставления объекта и описание
1

group(num = 0)

Этот метод возвращает полное совпадение (или конкретный номер подгруппы)

2

groups()

Этот метод возвращает все подходящие подгруппы в кортеже (пустые, если их не было)

пример

#!/usr/bin/python3
import re

line = "Cats are smarter than dogs"

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 ("No match!!")

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

matchObj.group() :  Cats are smarter than dogs
matchObj.group(1) :  Cats
matchObj.group(2) :  smarter

Функция поиска

Эта функция ищет первое вхождение шаблона RE в строке с необязательными флагами .

Вот синтаксис этой функции -

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

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

Sr. No. Параметр и описание
1

pattern

Это регулярное выражение, которое нужно сопоставить.

2

string

Это строка, в которой будет выполняться поиск по шаблону в любом месте строки.

3

flags

Вы можете указать разные флаги, используя побитовое ИЛИ (|). Это модификаторы, которые перечислены в таблице ниже.

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

Sr. No. Метод сопоставления объекта и описание
1

group(num = 0)

Этот метод возвращает полное совпадение (или конкретный номер подгруппы)

2

groups()

Этот метод возвращает все подходящие подгруппы в кортеже (пустые, если их не было)

пример

#!/usr/bin/python3
import re

line = "Cats are smarter than dogs";

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 ("Nothing found!!")

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

matchObj.group() :  Cats are smarter than dogs
matchObj.group(1) :  Cats
matchObj.group(2) :  smarter

Сопоставление и поиск

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

пример

#!/usr/bin/python3
import re

line = "Cats are smarter than dogs";

matchObj = re.match( r'dogs', line, re.M|re.I)
if matchObj:
   print ("match --> matchObj.group() : ", matchObj.group())
else:
   print ("No match!!")

searchObj = re.search( r'dogs', line, re.M|re.I)
if searchObj:
   print ("search --> searchObj.group() : ", searchObj.group())
else:
   print ("Nothing found!!")

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

No match!!
search --> matchObj.group() :  dogs

Искать и заменить

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

Синтаксис

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

Этот метод заменяет все вхождения шаблона RE в строке на repl , заменяя все вхождения, если не указано max . Этот метод возвращает измененную строку.

пример

#!/usr/bin/python3
import re

phone = "2004-959-559 # This is Phone Number"

# Delete Python-style comments
num = re.sub(r'#.*$', "", phone)
print ("Phone Num : ", num)

# Remove anything other than digits
num = re.sub(r'\D', "", phone)    
print ("Phone Num : ", num)

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

Phone Num :  2004-959-559
Phone Num :  2004959559

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

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

Sr. No. Модификатор и описание
1

re.I

Выполняет сопоставление без учета регистра.

2

re.L

Переводит слова в соответствии с текущим языковым стандартом. Эта интерпретация влияет на алфавитную группу (\ w и \ W), а также на поведение границ слова (\ b и \ B).

3

re.M

Заставляет $ совпадать с концом строки (а не только с концом строки), а ^ - с началом любой строки (а не только с началом строки).

4

re.S

Заставляет точку (точку) соответствовать любому символу, включая новую строку.

5

re.U

Интерпретирует буквы в соответствии с набором символов Юникода. Этот флаг влияет на поведение \ w, \ W, \ b, \ B.

6

re.X

Разрешает «более привлекательный» синтаксис регулярных выражений. Он игнорирует пробелы (кроме внутри набора [] или экранирования обратной косой чертой) и рассматривает неэкранированный # как маркер комментария.

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

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

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

Sr. No. Параметр и описание
1

^

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

2

$

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

3

.

Соответствует любому одиночному символу, кроме новой строки. Использование опции m также позволяет сопоставить новую строку.

4

[...]

Соответствует любому одиночному символу в скобках.

5

[^...]

Соответствует любому одиночному символу не в скобках

6

re*

Соответствует 0 или более вхождениям предыдущего выражения.

7

re+

Соответствует 1 или нескольким вхождениям предыдущего выражения.

8

re?

Соответствует 0 или 1 вхождению предыдущего выражения.

9

re{ n}

Соответствует ровно n повторениям предыдущего выражения.

10

re{ n,}

Соответствует n или нескольким вхождениям предыдущего выражения.

11

re{ n, m}

Соответствует минимум n и максимум m вхождениям предыдущего выражения.

12

a|b

Соответствует либо a, либо b.

13

(re)

Группирует регулярные выражения и запоминает совпадающий текст.

14

(?imx)

Временно переключает параметры i, m или x в регулярном выражении. Если указано в скобках, будет затронута только эта область.

15

(?-imx)

Временно отключает параметры i, m или x в регулярном выражении. Если указано в скобках, будет затронута только эта область.

16

(?: re)

Группирует регулярные выражения без запоминания совпадающего текста.

17

(?imx: re)

Временно переключает параметры i, m или x в скобках.

18

(?-imx: re)

Временно отключает параметры i, m или x в круглых скобках.

19

(?#...)

Комментарий.

20

(?= re)

Определяет положение с помощью шаблона. Не имеет диапазона.

21 год

(?! re)

Определяет позицию с использованием отрицания шаблона. Не имеет диапазона.

22

(?> re)

Соответствует независимому шаблону без возврата.

23

\w

Соответствует символам слова.

24

\W

Соответствует несловесным символам.

25

\s

Соответствует пробелу. Эквивалентно [\ t \ n \ r \ f].

26

\S

Соответствует пробелам.

27

\d

Соответствует цифрам. Эквивалентно [0-9].

28

\D

Соответствует нецифровым значениям.

29

\A

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

30

\Z

Соответствует концу строки. Если новая строка существует, она соответствует непосредственно перед новой строкой.

31 год

\z

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

32

\G

Точка совпадения, в которой закончился последний матч.

33

\b

Соответствует границам слова вне скобок. Соответствует пробелу (0x08) внутри скобок.

34

\B

Соответствует границам без слов.

35 год

\n, \t, etc.

Соответствует символам новой строки, возврата каретки, табуляции и т. Д.

36

\1...\9

Соответствует n-му сгруппированному подвыражению.

37

\10

Соответствует n-му сгруппированному подвыражению, если оно уже совпало. В противном случае относится к восьмеричному представлению символьного кода.

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

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

Sr. No. Пример и описание
1

python

Матч «питон».

Классы персонажей

Sr. No. Пример и описание
1

[Pp]ython

Соответствует "Python" или "python"

2

rub[ye]

Матч «рубин» или «рубин»

3

[aeiou]

Соответствует любой гласной в нижнем регистре

4

[0-9]

Соответствует любой цифре; то же, что и [0123456789]

5

[a-z]

Соответствует любой строчной букве ASCII

6

[A-Z]

Соответствует любой заглавной букве ASCII

7

[a-zA-Z0-9]

Соответствует любому из вышеперечисленных

8

[^aeiou]

Соответствует чему-либо, кроме гласной строчной буквы

9

[^0-9]

Сопоставьте все, кроме цифры

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

Sr. No. Пример и описание
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_]

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

Sr. No. Пример и описание
1

ruby?

Сопоставьте "rub" или "ruby": y необязательно

2

ruby*

Соответствует "руб" плюс 0 или более лет

3

ruby+

Матч "руб" плюс 1 или более лет

4

\d{3}

Соответствует ровно 3 цифрам

5

\d{3,}

Соответствие 3 или более цифрам

6

\d{3,5}

Соответствие 3, 4 или 5 цифрам

Неладное повторение

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

Sr. No. Пример и описание
1

<.*>

Жадное повторение: соответствует "<python> perl>"

2

<.*?>

Nongreedy: соответствует "<python>" в "<python> perl>"

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

Sr. No. Пример и описание
1

\D\d+

Нет группы: + повторяет \ d

2

(\D\d)+

Сгруппировано: + повторяет пару \ D \ d

3

([Pp]ython(,)?)+

Соответствие «Python», «Python, python, python» и т. Д.

Обратные ссылки

Это снова соответствует ранее подобранной группе -

Sr. No. Пример и описание
1

([Pp])ython&\1ails

Сопоставьте питон и ведра или Python и ведра

2

(['"])[^\1]*\1

Строка в одинарных или двойных кавычках. \ 1 соответствует тому, что соответствует первой группе. \ 2 соответствует тому, что соответствует второй группе и т. Д.

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

Sr. No. Пример и описание
1

python|perl

Матч "питон" или "перл"

2

rub(y|le)

Матч «рубин» или «рубль»

3

Python(!+|\?)

"Python", за которым следует один или несколько! или один?

Якоря

Здесь необходимо указать позицию совпадения.

Sr. No. Пример и описание
1

^Python

Соответствует "Python" в начале строки или внутренней строки

2

Python$

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

3

\APython

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

4

Python\Z

Соответствует "Python" в конце строки

5

\bPython\b

Соответствие "Python" на границе слова

6

\brub\B

\ B не является границей слова: сопоставьте «rub» с «rube» и «ruby», но не только

7

Python(?=!)

Соответствует «Python», если после него стоит восклицательный знак.

8

Python(?!!)

Соответствует «Python», если после него не стоит восклицательный знак.

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

Sr. No. Пример и описание
1

R(?#comment)

Матчи «Р». Все остальное - комментарий

2

R(?i)uby

Без учета регистра при сопоставлении "uby"

3

R(?i:uby)

То же, что и выше

4

rub(?:y|le))

Группировать только без создания обратной ссылки \ 1