Предыдущий урок: Модуль 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()
Функция 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





