Языки программирования

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

Регулярные выражения, также называемые regex, язык для поиска, извлечения и работы с определенными текстовыми шаблонами большего текста. Он широко используется в проектах, которые включают проверку текста, NLP (Обработка естественного языка) и интеллектуальную обработку текста.
Регулярные выражения используются практически во всех языках программирования. В python они реализованы в стандартном модуле «re».
Он широко используется в естественной обработке языка, веб-приложениях, требующих проверки ввода текста (например, адреса электронной почты) и почти во всех проектах в области анализа данных, которые включают в себя интеллектуальную обработку текста.

Согласуемые символы

Существуют определенные символы, которые заняты регулярными выражениями. Они так же известны как метасимволы. Рассмотрим полный список метасимволов, которые поддерживают регулярные выражения Python:
Python
. ˆ $ * + ? { } [ ] | ( )
Основная связка метасимволов, с которой вы будете сталкиваться, это квадратные скобки: [ и ]. Они используются для создания «класса символов», который является набором символов, которые вы можете сопоставить.

Вы можете отсортировать символы индивидуально, например, так: [xyz]. Это сопоставит любой внесенный в скобки символ. Вы также можете использовать тире для выражения ряда символов, соответственно: [a-g]. Рассмотрим пример:
‘a[b-f]*f
Этот шаблон регулярного выражения показывает, что мы ищем букву а, ноль или несколько букв из нашего класса, [b-f] и поиск должен закончиться на f. Давайте используем это выражение в Python:
import re
text = 'abcdfghijk'
 
parser = re.search('a[b-f]*f')
print(parser.group()) # 'abcdf'
Это выражение просмотрит всю переданную ей строку, в данном случае это «abcdfghijk».
Выражение найдет нашу букву «а» в начале поиска. Затем, в связи с тем, что она имеет класс символа со звездочкой в конце, выражение прочитает остальную часть строки, что бы посмотреть, сопоставима ли она.
Если нет, то выражение будет пропускать по одному символу, пытаясь найти совпадения.
Вся магия начинается, когда мы вызываем поисковую функцию модуля re. Если мы не найдем совпадение, тогда мы получим None. В противном случае, мы получим объект Match. Чтобы увидеть, как выглядит совпадение, вам нужно вызывать метод group.

Функция match

Эта функция пытается соответствовать RE pattern для string с дополнительными flags. Синтаксис этой функции:
re.match(pattern, string, flags = 0)
pattern – это регулярное выражение, которому необходимо соответствовать.

string – строка, которая будет искать, чтобы соответствовать шаблону в начале строки.

flags – можно задать различные флаги с помощью побитового OR (|).

Функция Re.match возвращает объект match если успех, и None если провал. Пример:
import re

line = "Кошки умнее собак"

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 ("Нет совпадения!!")
Будет выведено:
  matchObj.group() :  Кошки умнее собак
matchObj.group(1) :  Кошки
matchObj.group(2) :  умнее

Функция search

Эта функция ищет первое вхождение pattern re в string с дополнительными flags. Синтаксис этой функции:
re.search(pattern, string, flags = 0)
Функция Re.search возвращает объект match если успех, и None если провал. Пример:
import re

line = "Кошки умнее собак";

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 ("Ничего не найдено!!")
Будет выведено:
  matchObj.group() :  Кошки умнее собак
matchObj.group(1) :  Кошки
matchObj.group(2) :  умнее

Соответствие поиску версий

Python предлагает две различные примитивные операции, основанные на регулярных выражениях: match проверка на сравнение только в начале строки, в то время как search проверка на сравнение где – нибудь в строке. Пример:
import re

line = "Кошки умнее собак";

matchObj = re.match( r'собак', line, re.M|re.I)
if matchObj:
   print ("match --> matchObj.group() : ", matchObj.group())
else:
   print ("Нет совпадения!!")

searchObj = re.search( r'собак', line, re.M|re.I)
if searchObj:
   print ("search --> searchObj.group() : ", searchObj.group())
else:
   print ("Ничего не найдено!!")
Будет выведено:
  Нет совпадения!!
search --> matchObj.group() :  собак

Поиск и замена

Одним из наиболее важных методов re, которые используют регулярные выражения является sub. Синтаксис:
re.sub(pattern, repl, string, max=0)
Этот метод заменяет все вхождения RE pattern в string на repl, заменив все вхождения, если max не предусмотрен. Этот метод возвращает модифицированную строку. Пример:
import re

phone = "2004-959-559 # Это номер телефона"

# Удаление комментариев в стиле Python
num = re.sub(r'#.*$', "", phone)
print ("Номер телефона : ", num)

# Удалить все, кроме цифр
num = re.sub(r'\D', "", phone)    
print ("Номер телефона : ", num)
Будет выведено:
  Номер телефона :  2004-959-559
Номер телефона :  2004959559

Примеры регулярных выражений

Буквенные символы

python – Сравнение «python».

Классы символов

[Рр]ython – Сравнение «Python» или «python»
rub[ye] – Сравнение «ruby» или «rube»
[aeiou] – Соответствует любому одной строчной гласной
[0-9] – Сравнение любой цифры; такой же, как [0123456789]
[a-z] – Соответствует любому строчной букве ASCII
[A-Z] – Сравнение любой заглавной букве ASCII
[a-zA-Z0-9] – Сравнение любой из вышеперечисленных
[^aeiou] – Сравнение ничего, кроме нижнего регистра гласной
[^0-9] – Сравнение ничего, кроме цифр

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

. – Соответствует любому символу, кроме символа новой строки
\ d – Сравнение цифры: [0-9]
\D – Сравнение не цифры: [^ 0-9]
\s – Сравнение символа пробела: [\t\r\n\f]
\S – Сравнение без пробела: [^ \t\r\n\f]
\w – Сравнение одного текстового символа: [A-Za-z0-9_]
\W – Сравнение несловесным символом: [^ A-Za-z0-9_]

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

ruby? – Совпадение «rub» или «ruby»: у – необязательно
ruby* – Совпадение «rub» плюс 0 или более y.
ruby+ – Совпадение «rub» плюс 1 или более y.
\d{3,} – Совпадение ровно 3 цифры
\ Д {3} – Совпадение 3 или более цифр
\d{3,5} – Совпадение 3, 4 или 5 цифр

Группировка с круглой скобкой

\D\d+ – Ни одна из групп: + повторяется \d
(\D\d)+ – Сгруппированные: + повторяет пару \D\d
([Pp]ython(,)?)+ – Сравнение «Python», «Python, python, python» и т.д.

Обратные

([Pp])ython&\1ails – Сравнение python&pails или Python&Pails
([‘”])[^\1]*\1 – Одинарные- или двойные кавычки в строке. \1 – соответствует то, что в 1-й группе подобраны. \2 – Сравнение, что во 2-й группе соответствовал, и т. д.

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

python|perl – Сравнение «python» или «perl»
rub(y|le) – Сравнение «ruby» или «ruble»
Python(!+|\?) – «Python», а затем один или более! или один?

Якоря

Необходимо для определения позиции соответствия.
^Python – Сравнение «Python» в начале строки или внутренней линии
Python$ – Сравнение «Python» в конце строки или строки
\APython – Сравнение «Python» в начале строки
Python\Z – Сравнение «Python» в конце строки
\bPython\b – Сравнение «Python» на границе слова
\brub\B – \В является не словесной границей: Сравнение «rub» в «rube» и «ruby», но не в одиночку
Python(?=!) – Сравнение «Python», если за ними следует восклицательный знак.
Python(?!!) – Сравнение «Python», если не последует восклицательный знак.

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

R(?#comment) – Сравнение «R». Все остальное является комментарием
R(?i)uby – Без учета регистра при сопоставлении «uby»
R(?i:uby) – То же самое, что и выше
rub(?:y|le)) – Группировать только без создания обратной связи \1
Самоучитель по Python