Предыдущий урок: Модуль 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