Python - регулярные выражения
Регулярное выражение специальная последовательность символов , которая позволяет соответствовать или найти другие строки или наборы строк, используя специализированный синтаксис проведен в шаблоне. Регулярные выражения широко используются в мире UNIX.
Модуль Python reобеспечивает полную поддержку регулярных выражений, подобных Perl, в Python. Модуль re вызывает исключение re.error, если ошибка возникает при компиляции или использовании регулярного выражения.
Мы рассмотрим две важные функции, которые будут использоваться для обработки регулярных выражений. Но сначала небольшая вещь: существуют различные символы, которые будут иметь особое значение при использовании в регулярном выражении. Чтобы избежать путаницы при работе с регулярными выражениями, мы будем использовать Raw Strings какr'expression'.
Матч Функция
Эта функция пытается сопоставить шаблон 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/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 | pattern Это регулярное выражение, которое нужно сопоставить. |
2 | string Это строка, в которой будет выполняться поиск по шаблону в любом месте строки. |
3 | flags Вы можете указать разные флаги, используя побитовое ИЛИ (|). Это модификаторы, которые перечислены в таблице ниже. |
Функция re.search возвращаетmatch объект на успех, noneпри неудаче. Мы используем функцию group (num) или groups () отmatch объект, чтобы получить совпадающее выражение.
Sr.No. | Методы сопоставления объектов и описание |
---|---|
1 | group(num=0) Этот метод возвращает полное совпадение (или конкретный номер подгруппы) |
2 | groups() Этот метод возвращает все подходящие подгруппы в кортеже (пустые, если их не было) |
пример
#!/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 предлагает две разные примитивные операции, основанные на регулярных выражениях: match проверяет совпадение только в начале строки, а search проверяет совпадение в любом месте строки (это то, что 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 --> searchObj.group() : dogs
Искать и заменить
Один из наиболее важных re методы, использующие регулярные выражения, sub.
Синтаксис
re.sub(pattern, repl, string, max=0)
Этот метод заменяет все вхождения шаблона RE в строке на repl , заменяя все вхождения, если не указано max . Этот метод возвращает измененную строку.
пример
#!/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 Интерпретирует буквы в соответствии с набором символов Юникода. Этот флаг влияет на поведение \ 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 |