№24 Регулярные выражения в Python / Уроки по Python для начинающих

130

Предыдущий урок: Модуль JSON

RegEx, или регулярное выражение, представляет собой последовательность символов, которая формирует шаблон поиска.
Регулярные выражения используют, чтобы проверить, содержит ли строка указанный шаблон поиска.

Модуль Re

В Python есть встроенный модуль re, который можно использовать для работы с регулярными выражениями.

import  re

RegEx в Python

Найдем строку, чтобы увидеть, начинается ли она с «The» и заканчивается «Spain»:

import re
txt =  "The rain in Spain"
x = re.search("^The.*Spain$", txt)

Функции модуля Re

Модуль re предлагает набор функций, которые позволяют нам искать строку на предмет соответствия:

ФункцииЗначение
findallВозвращает список со всеми совпадениями
searchВозвращает объект Match, если в строке есть совпадение
splitВозвращает список, из строки, которую разделили по шаблону
subЗаменяет совпадение по шаблону, на заданную строку

Метасимволы

Метасимволы — это символы с особым значением:

СимволЗначениеПример
[]Содержит символы для поиска вхождений[a-m]
\Сигнализирует о специальном символе (также может использоваться для экранирования специальных символов)\d
.Любой символ, кроме новой строки (\n)“he…o”
^Строка начинается с“^hello”
$Строка заканчивается“world$”
*0 и более вхождений“aix*”
+1 и более вхождений“aix+”
{}Указанное количество вхождений“al{2}”
|Или“falls|stays”
()Группирует шаблон

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

Специальная пара символов представляет собой \, за которым следует один из символов в списке ниже, и имеет специальное значение:

СимволЗначениеПример
\AИщет символы в начале строки“\AThe”
\bИщет символы в начале или конец слова, в зависимости от расположенияr»\bain» r»ain\b»
\BИщет символы которые находятся НЕ в начале или конце строкиr»\Bain» r»ain\B»
\dИщет совпадения с числами 0-9“\d”
\DИщет совпадение, где строка не содержит числа“\D”
\sИщет совпадение с символом пробела“\s”
\SИщет совпадение, где строка НЕ содержит пробел“\S”
\wИщет совпадение, где строка содержит буквы, цифры или символ по подчеркивания (_)“\w”
\WИщет совпадение, где строка НЕ содержит буквы, цифры или символ по подчеркивания (_)“\W”
\ZИщет символы в конце строки“Spain\Z”

Комбинации

Комбинации — это набор символов внутри пары квадратных скобок [] со специальным значением:

КомбинацииЗначение
[arn]Возвращает совпадение, в котором присутствует один из указанных символов (a, r или n)
[a-n]Возвращает совпадение для с символом нижнего регистра в алфавитном порядке между a и n, включая их
[^arn]Возвращает совпадение для любого символа, КРОМЕ а, r и n
[0123]Возвращает совпадение, в котором присутствует любая из указанных цифр (0, 1, 2 или 3)
[0-9]Возвращает совпадение с любой цифрой от 0 до 9
[0-5][0-9]Возвращает совпадение с любыми двузначными числами от 0 до 59
[a-zA-Z]Возвращает совпадение с любым символом английского алфавита между a и z, включая строчные буквы и прописные
[а-яА-ЯёЁ]Возвращает совпадение с любым символом русского алфавита между а и я, включая строчные буквы и прописные
[+]В комбинациях символы +, *, ., |, (), $,{} не имеют особенного значения, поэтому [+]: будет искать любой + в строке

Функция findall()

Функция findall() возвращает список, содержащий все совпадения.

import re

string = "The rain in Spain"
x = re.findall("ai",  string)
print(x)

Вывод:

['ai', 'ai']

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

import re

string = "The rain in Spain"
x = re.findall("Portugal", string)
print(x)

Вывод:

[]

Функция search() ищет в строке совпадение и возвращает обьект Match, если оно найдено. Если найдено более одного совпадения, будет возвращено только первое совпадение.
Найдем первый символ пробела в строке:

import re

string = "The rain in Spain"
x = re.search("\s", string)
print("Индекс первого пробела:", x.start())

Вывод:

Индекс первого пробела: 3

Если совпадений не найдено, возвращается None .

import re

string = "The rain in Spain"
x = re.search("Portugal", string)
print(x)

Вывод:

None

Функция split()

Функция split() возвращает список, в котором строка разбита по шаблону.

import re

string = "The rain in Spain"
x = re.split("\s", string)
print(x)

Вывод:

['The', 'rain', 'in', 'Spain']

Вы можете контролировать количество разбитий, указав параметр maxsplit.

import re
  
string = "The rain in Spain"
x = re.split("\s", string, 1)
print(x)

Вывод:

['The', 'rain in Spain']

Функция sub()

Функция sub() заменяет совпадение указанным текстом.
Заменим каждый символ пробела цифрой 9.

import re

string = "The rain in Spain"
x = re.sub("\s", "9", string)
print(x)

Вывод:

The9rain9in9Spain

Вы можете контролировать количество замен, указав параметр count.

import re

string = "The rain in Spain"
x = re.sub("\s", "9", string, 2)
print(x)

Вывод:

The9rain9in Spain

Объект Match

Объект Match — это объект, содержащий информацию о поиске и результат.

Примечание: Если совпадений нет, будет возвращено None вместо объекта Match.
Выполним поиск, который вернет объект Match.

import re

string =  "The rain in Spain"
x = re.search("ai", string)
print(x)  # будет выведен объект

Вывод:

<re.Match object; span=(5, 7), match='ai'>

У объекта Match есть свойства и методы, используемые для получения информации о поиске и результате:

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

Выведем позицию (начальную и конечную) первого совпадения.

import re

string = "The rain in Spain"
x = re.search(r"\bS\w+", string)
print(x.span())

Вывод:

(12, 17)

Выведем строку, переданную в функцию.

import re

string = "The rain in Spain"  
x = re.search(r"\bS\w+", string)
print(x.string)

Вывод:

The rain in Spain

Выведем часть строки, где было совпадение.

import re

string = "The rain in Spain"
x = re.search(r"\bS\w+", string)  # Слово, которое начинается с S и продолжается буквенными символом
print(x.group())

Вывод:

Spain

Примечание: Если совпадений нет, будет возвращено None вместо объекта Match.

Углубиться в тему регулярных выражений можно помощью наше подборки документаций и примеров: Регулярные выражения

Далее: Python PIP