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