Python — регулярные выражения
Предыдущая страницаСледующая страница
Регулярное выражение — это специальная последовательность символов, которая помогает вам сопоставлять или находить другие строки или наборы строк, используя специальный синтаксис, хранящийся в шаблоне. Регулярные выражения широко используются в мире UNIX.
Модуль Python re обеспечивает полную поддержку Perl-подобных регулярных выражений в Python. Модуль re вызывает исключение re.error, если возникает ошибка при компиляции или использовании регулярного выражения.
Мы рассмотрим две важные функции, которые будут использоваться для обработки регулярных выражений. Но сначала небольшая вещь:существуют различные символы, которые будут иметь особое значение, когда они используются в регулярном выражении. Чтобы избежать путаницы при работе с регулярными выражениями, мы будем использовать необработанные строки как r'expression'. .
совпадение Функция
Эта функция пытается сопоставить RE pattern в строку с необязательными флагами .
Вот синтаксис этой функции —
re.match(pattern, string, flags=0)
Вот описание параметров —
Серийный номер | Параметр и описание |
---|---|
1 | <тд>|
2 | <тд>|
3 | <тд>
повторный матч функция возвращает совпадение объект в случае успеха, Нет при неудаче. Мы используем group(num) или группы() функция соответствия объект для получения совпадающего выражения.
Серийный номер | Сопоставить метод и описание объекта |
---|---|
1 | <тд>|
2 | <тд>
Пример
Живая демонстрация#!/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 pattern внутри строки с необязательными флагами .
Вот синтаксис этой функции —
re.search(pattern, string, flags=0)
Вот описание параметров —
Серийный номер | Параметр и описание |
---|---|
1 | <тд>|
2 | <тд>|
3 | <тд>
поиск функция возвращает совпадение объект в случае успеха, нет при неудаче. Мы используем group(num) или группы() функция соответствия объект для получения совпадающего выражения.
Серийный номер | Соответствие методам и описанию объекта |
---|---|
1 | <тд>|
2 | <тд>
Пример
Живая демонстрация#!/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 проверяет совпадение только в начале строки, а поиск проверяет совпадение в любом месте строки (это то, что 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
Найти и заменить
Один из самых важных ре методы, использующие регулярные выражения, sub .
Синтаксис
re.sub(pattern, repl, string, max=0)
Этот метод заменяет все вхождения RE pattern в строке с репл , заменяя все вхождения, кроме 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
Модификаторы регулярных выражений:флаги опций
Литералы регулярных выражений могут включать необязательный модификатор для управления различными аспектами сопоставления. Модификаторы указываются как необязательный флаг. Вы можете указать несколько модификаторов, используя исключающее ИЛИ (|), как показано ранее, и может быть представлено одним из этих —
Серийный номер | Модификатор и описание |
---|---|
1 | <тд>|
2 | <тд>|
3 | <тд>|
4 | <тд>|
5 | <тд>|
6 | <тд>
Шаблоны регулярных выражений
За исключением управляющих символов, (+ ? . * ^ $ ( ) [ ] { } | \) , все символы совпадают сами с собой. Вы можете избежать управляющего символа, поставив перед ним обратную косую черту.
В следующей таблице перечислены синтаксис регулярных выражений, доступный в Python —
Серийный номер | Шаблон и описание |
---|---|
1 | <тд>|
2 | <тд>|
3 | <тд>|
4 | <тд>|
5 | <тд>|
6 | <тд>|
7 | <тд>|
8 | <тд>|
9 | <тд>|
10 | <тд>|
11 | <тд>|
12 | <тд>|
13 | <тд>|
14 | <тд>|
15 | <тд>|
16 | <тд>|
17 | <тд>|
18 | <тд>|
19 | <тд>|
20 | <тд>|
21 | <тд>|
22 | <тд>|
23 | <тд>|
24 | <тд>|
25 | <тд>|
26 | <тд>|
27 | <тд>|
28 | <тд>|
29 | <тд>|
30 | <тд>|
31 | <тд>|
32 | <тд>|
33 | <тд>|
34 | <тд>|
35 | <тд>|
36 | <тд>|
37 | <тд>
Примеры регулярных выражений
Буквальные символы
Серийный номер | Пример и описание |
---|---|
1 | <тд>
Классы персонажей
Серийный номер | Пример и описание |
---|---|
1 | <тд>|
2 | <тд>|
3 | <тд>|
4 | <тд>|
5 | <тд>|
6 | <тд>|
7 | <тд>|
8 | <тд>|
9 | <тд>
Специальные классы символов
Серийный номер | Пример и описание |
---|---|
1 | <тд>|
2 | <тд>|
3 | <тд>|
4 | <тд>|
5 | <тд>|
6 | <тд>|
7 | <тд>
Случаи повторения
Серийный номер | Пример и описание |
---|---|
1 | <тд>|
2 | <тд>|
3 | <тд>|
4 | <тд>|
5 | <тд>|
6 | <тд>
Нежадное повторение
Это соответствует наименьшему количеству повторений —
Серийный номер | Пример и описание |
---|---|
1 | <тд>|
2 | <тд>
Группировка в скобках
Серийный номер | Пример и описание |
---|---|
1 | <тд>|
2 | <тд>|
3 | <тд>
Обратные ссылки
Это снова соответствует ранее сопоставленной группе —
Серийный номер | Пример и описание |
---|---|
1 | <тд>|
2 | <тд>
Альтернативы
Серийный номер | Пример и описание |
---|---|
1 | <тд>|
2 | <тд>|
3 | <тд>
Якоря
Для этого необходимо указать позицию совпадения.
Серийный номер | Пример и описание |
---|---|
1 | <тд>|
2 | <тд>|
3 | <тд>|
4 | <тд>|
5 | <тд>|
6 | <тд>|
7 | <тд>|
8 | <тд>
Специальный синтаксис со скобками
Серийный номер | Пример и описание |
---|---|
1 | <тд>|
2 | <тд>|
3 | <тд>|
4 | <тд>
Python