Учебники

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

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

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

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

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

Sr.No. Выражение и матчи
1

а, х, 9, <

обычные персонажи точно совпадают.

2

, (Период)

соответствует любому отдельному символу, кроме новой строки ‘\ n’

3

\ ш

соответствует «словесному» символу: букве или цифре или подчеркиванию [a-zA-Z0-9_].

4

\ W

соответствует любому несловесному символу.

5

\ б

граница между словом и не словом

6

\ s

соответствует одному символу пробела — пробел, новая строка, возврат, табуляция

7

\ S

соответствует любому непробельному символу.

8

\ t, \ n, \ r

вкладка, новая строка, возврат

9

\ d

десятичная цифра [0-9]

10

^

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

11

$

сопоставить конец строки

12

\

подавить «особенность» персонажа.

а, х, 9, <

обычные персонажи точно совпадают.

, (Период)

соответствует любому отдельному символу, кроме новой строки ‘\ n’

\ ш

соответствует «словесному» символу: букве или цифре или подчеркиванию [a-zA-Z0-9_].

\ W

соответствует любому несловесному символу.

\ б

граница между словом и не словом

\ s

соответствует одному символу пробела — пробел, новая строка, возврат, табуляция

\ S

соответствует любому непробельному символу.

\ t, \ n, \ r

вкладка, новая строка, возврат

\ d

десятичная цифра [0-9]

^

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

$

сопоставить конец строки

\

подавить «особенность» персонажа.

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

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

Sr.No. Флаг и смысл
1

ASCII, A

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

2

DOTALL, S

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

3

IGNORECASE, я

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

4

LOCALE, L

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

5

МУЛЬТИЛАЙН, М

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

6

VERBOSE, X (для «расширенного»)

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

ASCII, A

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

DOTALL, S

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

IGNORECASE, я

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

LOCALE, L

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

МУЛЬТИЛАЙН, М

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

VERBOSE, X (для «расширенного»)

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

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

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

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

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

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

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

шаблон

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

2

строка

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

3

флаги

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

шаблон

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

строка

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

флаги

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

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

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

группа (число = 0)

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

2

группы ()

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

группа (число = 0)

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

группы ()

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

пример

Live Demo

#!/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

шаблон

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

2

строка

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

3

флаги

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

шаблон

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

строка

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

флаги

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

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

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

группа (число = 0)

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

2

группы ()

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

группа (число = 0)

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

группы ()

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

пример

Live Demo

#!/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 предлагает две различные примитивные операции, основанные на регулярных выражениях: проверка на совпадение только в начале строки, а поиск проверяет совпадение в любом месте строки (это то, что Perl делает по умолчанию).

пример

Live Demo

#!/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 . Этот метод возвращает измененную строку.

пример

Live Demo

#!/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

Интерпретирует буквы в соответствии с набором символов 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 —

^

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

$

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

,

Соответствует любому отдельному символу, кроме новой строки. Использование опции 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

([Рр] ython (,)?) +

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

\ D \ d & плюс;

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

(\ D \ d) +

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

([Рр] 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 обратной ссылки