Учебники

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

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

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

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

Функция матча

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

Вот синтаксис для этой функции —

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

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

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

шаблон

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

2

строка

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

3

флаги

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

шаблон

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

строка

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

флаги

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

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

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

группа (Num = 0)

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

2

группы ()

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

группа (Num = 0)

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

группы ()

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

пример

Live Demo

#!/usr/bin/python
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

шаблон

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

2

строка

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

3

флаги

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

шаблон

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

строка

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

флаги

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

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

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

группа (Num = 0)

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

2

группы ()

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

группа (Num = 0)

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

группы ()

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

пример

Live Demo

#!/usr/bin/python
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!!"

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

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

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

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

пример

Live Demo

#!/usr/bin/python
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 , заменяя все вхождения, если не указано максимальное значение . Этот метод возвращает измененную строку.

пример

Live Demo

#!/usr/bin/python
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

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

6

re.X

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

re.I

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

re.L

Интерпретирует слова в соответствии с текущей локалью. Эта интерпретация влияет на буквенную группу (\ w и \ W), а также на поведение границ слов (\ b и \ B).

re.M

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

re.S

Делает точку (точку) совпадением с любым символом, включая символ новой строки.

re.U

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

re.X

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

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

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

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

Sr.No. Шаблон и описание
1

^

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

2

$

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

3

,

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

4

[…]

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

5

[^ …]

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

6

ре *

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

7

ре +

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

8

повторно?

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

9

re {n}

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

10

re {n,}

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

11

re {n, m}

Соответствует не менее n и не более m вхождений предшествующего выражения.

12

| б

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

13

(ре)

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

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

\ ш

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

24

\ W

Соответствует несловесным персонажам.

25

\ s

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

26

\ S

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

27

\ d

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

28

\ D

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

29

\ A

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

30

\ Z

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

31

\ г

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

32

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

33

\ б

Соответствует границам слов, когда они выходят за скобки. Соответствует Backspace (0x08) внутри скобок.

34

\ B

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

35

\ n, \ t и т. д.

Сопоставляет переводы строк, возврат каретки, вкладки и т. Д.

36

\ 1 … \ 9

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

37

\ 10

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

^

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

$

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

,

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

[…]

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

[^ …]

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

ре *

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

ре +

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

повторно?

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

re {n}

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

re {n,}

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

re {n, m}

Соответствует не менее n и не более m вхождений предшествующего выражения.

| б

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

(ре)

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

(? IMX)

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

(? -imx)

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

(?: re)

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

(? imx: re)

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

(? -imx: re)

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

(? # …)

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

(? = re)

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

(?! re)

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

(?> re)

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

\ ш

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

\ W

Соответствует несловесным персонажам.

\ s

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

\ S

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

\ d

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

\ D

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

\ A

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

\ Z

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

\ г

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

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

\ б

Соответствует границам слов, когда они выходят за скобки. Соответствует Backspace (0x08) внутри скобок.

\ B

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

\ n, \ t и т. д.

Сопоставляет переводы строк, возврат каретки, вкладки и т. Д.

\ 1 … \ 9

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

\ 10

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

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

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

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

питон

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

питон

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

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

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

[Рр] ython

Совпадение «Питон» или «Питон»

2

руб [вы]

Совпадение «рубин» или «рубин»

3

[AEIOU]

Соответствует любой строчной гласной

4

[0-9]

Сопоставить любую цифру; такой же как [0123456789]

5

[AZ]

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

6

[AZ]

Совпадение с любой прописной буквой ASCII

7

[A-Za-Z0-9]

Подходим любой из вышеперечисленных

8

[^ AEIOU]

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

9

[^ 0-9]

Совпадение с чем угодно, кроме цифры

[Рр] ython

Совпадение «Питон» или «Питон»

руб [вы]

Совпадение «рубин» или «рубин»

[AEIOU]

Соответствует любой строчной гласной

[0-9]

Сопоставить любую цифру; такой же как [0123456789]

[AZ]

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

[AZ]

Совпадение с любой прописной буквой ASCII

[A-Za-Z0-9]

Подходим любой из вышеперечисленных

[^ AEIOU]

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

[^ 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

\ ш

Совпадение с одним словом: [A-Za-z0-9_]

7

\ W

Соответствует несловесному символу: [^ A-Za-z0-9_]

,

Подберите любой символ, кроме новой строки

\ d

Совпадение с цифрой: [0-9]

\ D

Совпадение с нецифровой цифрой: [^ 0-9]

\ s

Совпадение с пробелом: [\ t \ r \ n \ f]

\ S

Соответствие непробельному пространству: [^ \ t \ r \ n \ f]

\ ш

Совпадение с одним словом: [A-Za-z0-9_]

\ W

Соответствует несловесному символу: [^ A-Za-z0-9_]

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

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

Рубин?

Совпадение «руб» или «рубин»: у необязательно

2

Рубин*

Совпадение «руб» плюс 0 или более лет

3

рубин +

Совпадение «руб» плюс 1 или более лет

4

\ д {3}

Совпадение ровно 3 цифры

5

\ д {3}

Совпадение 3 или более цифр

6

\ д {3,5}

Совпадение 3, 4 или 5 цифр

Рубин?

Совпадение «руб» или «рубин»: у необязательно

Рубин*

Совпадение «руб» плюс 0 или более лет

рубин +

Совпадение «руб» плюс 1 или более лет

\ д {3}

Совпадение ровно 3 цифры

\ д {3}

Совпадение 3 или более цифр

\ д {3,5}

Совпадение 3, 4 или 5 цифр

Нежелательное повторение

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

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

<. *>

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

2

<. *?>

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

<. *>

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

<. *?>

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

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

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

\ D \ D +

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

2

(\ D \ d) +

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

3

([Pp] ython (,)?) +

Совпадение «Питон», «Питон, питон, питон» и т. Д.

\ D \ D +

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

(\ D \ d) +

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

([Pp] ython (,)?) +

Совпадение «Питон», «Питон, питон, питон» и т. Д.

Обратные

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

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

([Рр]) ython & \ 1ails

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

2

([ ‘ «]) [^ \ 1] * \ 1

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

([Рр]) ython & \ 1ails

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

([ ‘ «]) [^ \ 1] * \ 1

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

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

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

питон | Perl

Совпадение «питон» или «perl»

2

руб (у | ль))

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

3

Python (+ |!? \)

«Питон», за которым следует один или несколько! или один?

питон | Perl

Совпадение «питон» или «perl»

руб (у | ль))

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

Python (+ |!? \)

«Питон», за которым следует один или несколько! или один?

Якоря

Для этого необходимо указать позицию матча.

^ Python

Совпадение «Python» в начале строки или внутренней строки

Python $

Совпадение «Python» в конце строки или строки

\ APython

Совпадение «Python» в начале строки

Python \ Z

Совпадение «Python» в конце строки

\ bPython \ б

Совпадение «Питон» на границе слова

\ brub \ B

\ B является границей без слов: соответствует «rub» в «rube» и «ruby», но не в одиночку

Python (?! =)

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

Python (? !!)

Совпадение с «Питоном», если за ним не стоит восклицательный знак.

R (? # Комментарий)

Спички «R». Все остальное — комментарий

R (? Я) убий

Учитывает регистр при сопоставлении «uby»

R (I: убий)

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

руб: |) (у ля?)

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