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 | <тд> группа(число=0)
Этот метод возвращает полное совпадение (или конкретный номер подгруппы)
| 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 | <тд> группа(число=0)
Этот метод возвращает полное совпадение (или конкретный номер подгруппы)
| 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 | <тд> ре.I
Выполняет сопоставление без учета регистра.
| 2 | <тд> ре.Л
Интерпретирует слова в соответствии с текущей локалью. Эта интерпретация влияет на алфавитную группу (\w и \W), а также на поведение границы слова (\b и \B).
| 3 | <тд> рем.М
Делает $ совпадающим с концом строки (а не только с концом строки) и совмещает ^ с началом любой строки (а не только с началом строки).
| 4 | <тд> ре.С
Делает точку (точку) соответствующей любому символу, включая новую строку.
| 5 | <тд> re.U
Интерпретирует буквы в соответствии с набором символов Unicode. Этот флаг влияет на поведение \w, \W, \b, \B.
| 6 | <тд> ре.Х
Разрешает "симпатичный" синтаксис регулярных выражений. Он игнорирует пробелы (кроме как внутри набора [] или когда экранируется обратной косой чертой) и рассматривает неэкранированный символ # как маркер комментария.
Шаблоны регулярных выражений
За исключением управляющих символов, (+ ? . * ^ $ ( ) [ ] { } | \) , все символы совпадают сами с собой. Вы можете избежать управляющего символа, поставив перед ним обратную косую черту.
В следующей таблице перечислены синтаксис регулярных выражений, доступный в Python —
| Серийный номер | Шаблон и описание |
| 1 | <тд> ^
Соответствует началу строки.
| 2 | <тд> $
Соответствует концу строки.
| 3 | <тд> .
Соответствует любому одиночному символу, кроме новой строки. Использование параметра m позволяет также совпадать с новой строкой.
| 4 | <тд> [...]
Соответствует любому одиночному символу в квадратных скобках.
| 5 | <тд> [^...]
Соответствует любому одиночному символу, не указанному в квадратных скобках
| 6 | <тд> повторно*
Соответствует 0 или более вхождениям предшествующего выражения.
| 7 | <тд> повторить+
Соответствует 1 или более вхождению предшествующего выражения.
| 8 | <тд> повторно?
Соответствует 0 или 1 вхождению предыдущего выражения.
| 9 | <тд> ре{ п
Соответствует точно n количеству вхождений предыдущего выражения.
| 10 | <тд> ре{ н,
Соответствует n или более вхождениям предыдущего выражения.
| 11 | <тд> re{ n, м
Соответствует как минимум n и максимум m вхождениям предшествующего выражения.
| 12 | <тд> а| б
Соответствует либо a, либо b.
| 13 | <тд> (повторно)
Группирует регулярные выражения и запоминает совпадающий текст.
| 14 | <тд> (?imx)
Временно включает опции i, m или x в регулярном выражении. Если в скобках, затрагивается только эта область.
| 15 | <тд> (?-imx)
Временно отключает параметры i, m или x в регулярном выражении. Если в скобках, затрагивается только эта область.
| 16 | <тд> (?:повторно)
Группирует регулярные выражения без запоминания совпадающего текста.
| 17 | <тд> (?imx:повторно)
Временно включает опции i, m или x в скобках.
| 18 | <тд> (?-imx:повторно)
Временно отключает параметры i, m или x в скобках.
| 19 | <тд> (?#...)
Комментарий.
| 20 | <тд> (?=повторно)
Задает положение с помощью шаблона. Не имеет диапазона.
| 21 | <тд> (?! повторно)
Определяет позицию, используя отрицание шаблона. Не имеет диапазона.
| 22 | <тд> (?> повторно)
Соответствует независимому шаблону без возврата.
| 23 | <тд> \в
Соответствует символам слова.
| 24 | <тд> \В
Соответствует несловесным символам.
| 25 | <тд> \с
Соответствует пробелу. Эквивалентно [\t\n\r\f].
| 26 | <тд> \С
Соответствует непробельным символам.
| 27 | <тд> \д
Соответствует цифрам. Эквивалентно [0-9].
| 28 | <тд> \Д
Соответствует нецифровым числам.
| 29 | <тд> \А
Соответствует началу строки.
| 30 | <тд> \Z
Соответствует концу строки. Если существует новая строка, она совпадает непосредственно перед новой строкой.
| 31 | <тд> \г
Соответствует концу строки.
| 32 | <тд> \G
Соответствует точке, где закончилось последнее совпадение.
| 33 | <тд> \b
Соответствует границам слов вне квадратных скобок. Соответствует возврату (0x08) внутри квадратных скобок.
| 34 | <тд> \B
Соответствует границам слов.
| 35 | <тд> \n, \t и т. д.
Соответствует новой строке, возврату каретки, табуляции и т. д.
| 36 | <тд> \1...\9
Соответствует n-му сгруппированному подвыражению.
| 37 | <тд> \10
Соответствует n-му сгруппированному подвыражению, если оно уже совпало. В противном случае относится к восьмеричному представлению кода символа.
Примеры регулярных выражений
Буквальные символы
| Серийный номер | Пример и описание |
| 1 | <тд> питон
Соответствует "питон".
Классы персонажей
| Серийный номер | Пример и описание |
| 1 | <тд> [Pp]итон
Соответствие "Python" или "python"
| 2 | <тд> руб[ва]
Соответствие "ruby" или "rube"
| 3 | <тд> [аиоу]
Совпадение с любой гласной в нижнем регистре
| 4 | <тд> [0–9]
Сопоставьте любую цифру; то же, что и [0123456789]
| 5 | <тд> [а-я]
Совпадение с любой строчной буквой ASCII
| 6 | <тд> [А–Я]
Совпадение с любой заглавной буквой ASCII
| 7 | <тд> [a-zA-Z0-9]
Соответствует любому из вышеперечисленных
| 8 | <тд> [^aeiou]
Соответствует чему угодно, кроме строчной гласной
| 9 | <тд> [^0-9]
Соответствует чему угодно, кроме цифры
Специальные классы символов
| Серийный номер | Пример и описание |
| 1 | <тд> .
Соответствует любому символу, кроме новой строки
| 2 | <тд> \д
Совпадение с цифрой:[0-9]
| 3 | <тд> \Д
Совпадение с нецифрой:[^0-9]
| 4 | <тд> \с
Совпадение с пробельным символом:[ \t\r\n\f]
| 5 | <тд> \С
Совпадение без пробелов:[^ \t\r\n\f]
| 6 | <тд> \в
Совпадение с одним символом слова:[A-Za-z0-9_]
| 7 | <тд> \В
Совпадение с символом, не являющимся словом:[^A-Za-z0-9_]
Случаи повторения
| Серийный номер | Пример и описание |
| 1 | <тд> рубин?
Соответствие «rub» или «ruby»:Y указывать необязательно
| 2 | <тд> рубин*
Соответствует "rub" плюс 0 или более лет
| 3 | <тд> рубин+
Соответствует "rub" плюс 1 или более ys
| 4 | <тд> \d{3}
Совпадение ровно с 3 цифрами
| 5 | <тд> \d{3,
Совпадение с 3 или более цифрами
| 6 | <тд> \d{3,5}
Совпадение 3, 4 или 5 цифр
Нежадное повторение
Это соответствует наименьшему количеству повторений —
| Серийный номер | Пример и описание |
| 1 | <тд> <.*>
Жадное повторение:соответствует "perl>"
| 2 | <тд> <.*?>
Нежадный:соответствует "" в "perl>"
Группировка в скобках
| Серийный номер | Пример и описание |
| 1 | <тд> \D\d+
Без группы:+ повторяется \d
| 2 | <тд> (\D\d)+
Сгруппировано:+ повторяется пара \D\d
| 3 | <тд> ([Pp]ython(, )?)+
Соответствие «Python», «Python, python, python» и т. д.
Обратные ссылки
Это снова соответствует ранее сопоставленной группе —
| Серийный номер | Пример и описание |
| 1 | <тд> ([Pp])итон&\1ails
Совпадение с питоном и ведрами или Python и ведрами
| 2 | <тд> (['"])[^\1]*\1
Строка в одинарных или двойных кавычках. \1 соответствует тому, что соответствует 1-й группе. \2 соответствует тому, что соответствует второй группе и т. д.
Альтернативы
| Серийный номер | Пример и описание |
| 1 | <тд> питон|перл
Соответствует "python" или "perl"
| 2 | <тд> руб(у|ле))
Соответствие "рубин" или "рубль"
| 3 | <тд> Питон(!+|\?)
«Python», за которым следует один или несколько ! или один?
Якоря
Для этого необходимо указать позицию совпадения.
| Серийный номер | Пример и описание |
| 1 | <тд> ^Питон
Соответствие «Python» в начале строки или внутренней строки
| 2 | <тд> Питон$
Соответствие "Python" в конце строки или строки
| 3 | <тд> \АПитон
Совпадение с "Python" в начале строки
| 4 | <тд> Питон\Z
Соответствие "Python" в конце строки
| 5 | <тд> \bПитон\b
Сопоставить "Python" на границе слова
| 6 | <тд> \brub\B
\B не является границей слова:соответствует "rub" в "rube" и "ruby", но не отдельно
| 7 | <тд> Питон(?=!)
Сопоставьте "Python", если за ним стоит восклицательный знак.
| 8 | <тд> Питон(?!!)
Сопоставьте "Python", если за ним не стоит восклицательный знак.
Специальный синтаксис со скобками
| Серийный номер | Пример и описание |
| 1 | <тд> R(?#комментарий)
Соответствует «Р». Все остальное - комментарий
| 2 | <тд> R(?i)uby
Без учета регистра при сопоставлении "uby"
| 3 | <тд> R(?i:uby)
То же, что и выше
| 4 | <тд> руб(?:y|le))
Только группа без создания обратной ссылки \1