Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Industrial programming >> Python

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

Предыдущая страницаСледующая страница

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

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

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

совпадение Функция

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

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

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

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

<тд>

шаблон

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

<тд>

строка

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

<тд>

флаги

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

Серийный номер Параметр и описание
1
2
3

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

<тд>

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

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

<тд>

группы()

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

Серийный номер Сопоставить метод и описание объекта
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) или группы() функция соответствия объект для получения совпадающего выражения.

<тд>

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

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

<тд>

группы()

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

Серийный номер Соответствие методам и описанию объекта
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

Модификаторы регулярных выражений:флаги опций

Литералы регулярных выражений могут включать необязательный модификатор для управления различными аспектами сопоставления. Модификаторы указываются как необязательный флаг. Вы можете указать несколько модификаторов, используя исключающее ИЛИ (|), как показано ранее, и может быть представлено одним из этих —

<тд>

ре.I

Выполняет сопоставление без учета регистра.

<тд>

ре.Л

Интерпретирует слова в соответствии с текущей локалью. Эта интерпретация влияет на алфавитную группу (\w и \W), а также на поведение границы слова (\b и \B).

<тд>

рем.М

Делает $ совпадающим с концом строки (а не только с концом строки) и совмещает ^ с началом любой строки (а не только с началом строки).

<тд>

ре.С

Делает точку (точку) соответствующей любому символу, включая новую строку.

<тд>

re.U

Интерпретирует буквы в соответствии с набором символов Unicode. Этот флаг влияет на поведение \w, \W, \b, \B.

<тд>

ре.Х

Разрешает "симпатичный" синтаксис регулярных выражений. Он игнорирует пробелы (кроме как внутри набора [] или когда экранируется обратной косой чертой) и рассматривает неэкранированный символ # как маркер комментария.

Серийный номер Модификатор и описание
1
2
3
4
5
6

Шаблоны регулярных выражений

За исключением управляющих символов, (+ ? . * ^ $ ( ) [ ] { } | \) , все символы совпадают сами с собой. Вы можете избежать управляющего символа, поставив перед ним обратную косую черту.

В следующей таблице перечислены синтаксис регулярных выражений, доступный в Python —

<тд>

^

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

<тд>

$

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

<тд>

.

Соответствует любому одиночному символу, кроме новой строки. Использование параметра m позволяет также совпадать с новой строкой.

<тд>

[...]

Соответствует любому одиночному символу в квадратных скобках.

<тд>

[^...]

Соответствует любому одиночному символу, не указанному в квадратных скобках

<тд>

повторно*

Соответствует 0 или более вхождениям предшествующего выражения.

<тд>

повторить+

Соответствует 1 или более вхождению предшествующего выражения.

<тд>

повторно?

Соответствует 0 или 1 вхождению предыдущего выражения.

<тд>

ре{ п

Соответствует точно n количеству вхождений предыдущего выражения.

<тд>

ре{ н,

Соответствует n или более вхождениям предыдущего выражения.

<тд>

re{ n, м

Соответствует как минимум n и максимум m вхождениям предшествующего выражения.

<тд>

а| б

Соответствует либо a, либо b.

<тд>

(повторно)

Группирует регулярные выражения и запоминает совпадающий текст.

<тд>

(?imx)

Временно включает опции i, m или x в регулярном выражении. Если в скобках, затрагивается только эта область.

<тд>

(?-imx)

Временно отключает параметры i, m или x в регулярном выражении. Если в скобках, затрагивается только эта область.

<тд>

(?:повторно)

Группирует регулярные выражения без запоминания совпадающего текста.

<тд>

(?imx:повторно)

Временно включает опции i, m или x в скобках.

<тд>

(?-imx:повторно)

Временно отключает параметры i, m или x в скобках.

<тд>

(?#...)

Комментарий.

<тд>

(?=повторно)

Задает положение с помощью шаблона. Не имеет диапазона.

<тд>

(?! повторно)

Определяет позицию, используя отрицание шаблона. Не имеет диапазона.

<тд>

(?> повторно)

Соответствует независимому шаблону без возврата.

<тд>

Соответствует символам слова.

<тд>

Соответствует несловесным символам.

<тд>

Соответствует пробелу. Эквивалентно [\t\n\r\f].

<тд>

Соответствует непробельным символам.

<тд>

Соответствует цифрам. Эквивалентно [0-9].

<тд>

Соответствует нецифровым числам.

<тд>

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

<тд>

\Z

Соответствует концу строки. Если существует новая строка, она совпадает непосредственно перед новой строкой.

<тд>

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

<тд>

\G

Соответствует точке, где закончилось последнее совпадение.

<тд>

\b

Соответствует границам слов вне квадратных скобок. Соответствует возврату (0x08) внутри квадратных скобок.

<тд>

\B

Соответствует границам слов.

<тд>

\n, \t и т. д.

Соответствует новой строке, возврату каретки, табуляции и т. д.

<тд>

\1...\9

Соответствует n-му сгруппированному подвыражению.

<тд>

\10

Соответствует n-му сгруппированному подвыражению, если оно уже совпало. В противном случае относится к восьмеричному представлению кода символа.

Серийный номер Шаблон и описание
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

Классы персонажей

<тд>

[Pp]итон

Соответствие "Python" или "python"

<тд>

руб[ва]

Соответствие "ruby" или "rube"

<тд>

[аиоу]

Совпадение с любой гласной в нижнем регистре

<тд>

[0–9]

Сопоставьте любую цифру; то же, что и [0123456789]

<тд>

[а-я]

Совпадение с любой строчной буквой ASCII

<тд>

[А–Я]

Совпадение с любой заглавной буквой ASCII

<тд>

[a-zA-Z0-9]

Соответствует любому из вышеперечисленных

<тд>

[^aeiou]

Соответствует чему угодно, кроме строчной гласной

<тд>

[^0-9]

Соответствует чему угодно, кроме цифры

Серийный номер Пример и описание
1
2
3
4
5
6
7
8
9

Специальные классы символов

<тд>

.

Соответствует любому символу, кроме новой строки

<тд>

Совпадение с цифрой:[0-9]

<тд>

Совпадение с нецифрой:[^0-9]

<тд>

Совпадение с пробельным символом:[ \t\r\n\f]

<тд>

Совпадение без пробелов:[^ \t\r\n\f]

<тд>

Совпадение с одним символом слова:[A-Za-z0-9_]

<тд>

Совпадение с символом, не являющимся словом:[^A-Za-z0-9_]

Серийный номер Пример и описание
1
2
3
4
5
6
7

Случаи повторения

<тд>

рубин?

Соответствие «rub» или «ruby»:Y указывать необязательно

<тд>

рубин*

Соответствует "rub" плюс 0 или более лет

<тд>

рубин+

Соответствует "rub" плюс 1 или более ys

<тд>

\d{3}

Совпадение ровно с 3 цифрами

<тд>

\d{3,

Совпадение с 3 или более цифрами

<тд>

\d{3,5}

Совпадение 3, 4 или 5 цифр

Серийный номер Пример и описание
1
2
3
4
5
6

Нежадное повторение

Это соответствует наименьшему количеству повторений —

<тд>

<.*>

Жадное повторение:соответствует "perl>"

<тд>

<.*?>

Нежадный:соответствует "" в "perl>"

Серийный номер Пример и описание
1
2

Группировка в скобках

<тд>

\D\d+

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

<тд>

(\D\d)+

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

<тд>

([Pp]ython(, )?)+

Соответствие «Python», «Python, python, python» и т. д.

Серийный номер Пример и описание
1
2
3

Обратные ссылки

Это снова соответствует ранее сопоставленной группе —

<тд>

([Pp])итон&\1ails

Совпадение с питоном и ведрами или Python и ведрами

<тд>

(['"])[^\1]*\1

Строка в одинарных или двойных кавычках. \1 соответствует тому, что соответствует 1-й группе. \2 соответствует тому, что соответствует второй группе и т. д.

Серийный номер Пример и описание
1
2

Альтернативы

<тд>

питон|перл

Соответствует "python" или "perl"

<тд>

руб(у|ле))

Соответствие "рубин" или "рубль"

<тд>

Питон(!+|\?)

«Python», за которым следует один или несколько ! или один?

Серийный номер Пример и описание
1
2
3

Якоря

Для этого необходимо указать позицию совпадения.

<тд>

^Питон

Соответствие «Python» в начале строки или внутренней строки

<тд>

Питон$

Соответствие "Python" в конце строки или строки

<тд>

\АПитон

Совпадение с "Python" в начале строки

<тд>

Питон\Z

Соответствие "Python" в конце строки

<тд>

\bПитон\b

Сопоставить "Python" на границе слова

<тд>

\brub\B

\B не является границей слова:соответствует "rub" в "rube" и "ruby", но не отдельно

<тд>

Питон(?=!)

Сопоставьте "Python", если за ним стоит восклицательный знак.

<тд>

Питон(?!!)

Сопоставьте "Python", если за ним не стоит восклицательный знак.

Серийный номер Пример и описание
1
2
3
4
5
6
7
8

Специальный синтаксис со скобками

<тд>

R(?#комментарий)

Соответствует «Р». Все остальное - комментарий

<тд>

R(?i)uby

Без учета регистра при сопоставлении "uby"

<тд>

R(?i:uby)

То же, что и выше

<тд>

руб(?:y|le))

Только группа без создания обратной ссылки \1

Серийный номер Пример и описание
1
2
3
4

Python

  1. Типы данных Python
  2. Операторы Python
  3. Оператор передачи Python
  4. Аргументы функции Python
  5. Словарь Питона
  6. Итераторы Python
  7. Замыкания Python
  8. регулярное выражение Python
  9. Дата и время Python
  10. Java — регулярные выражения