Продолжаем изучение регулярных выражений в Python. На прошлом уроке мы познакомились с регулярными выражениями, модулем re и основными методами работы с ним. Предыдущие примеры были ограничены поиском конкретных последовательностей символов. Регулярные выражения куда мощнее и позволяют искать наборы символов, отвечающие определенным правилам.
Извлечение телефонных номеров
Рассмотрим задачу: извлечение телефонных номеров из большого телефонного справочника, содержащего адреса и электронную почту. Точный формат номера неизвестен, но известен общий шаблон (например, для российских мобильных номеров: +7 код региона пробел три цифры пробел четыре цифры). Регулярные выражения подходят для решения подобных задач.
Шаблоны: специальные символы
Импортируем модуль re:
import re
Возьмём тестовую строку:
string = "kjg 87 + kjg 684 KJG kjg"
Используем метод search(), возвращающий первое совпадение. Для создания шаблонов используем сырые строки, начинающиеся с r:
result = re.search(r"шаблон", string)
Символ r перед строкой отключает экранирование символов (например, \n как перевод строки). Это необходимо для корректной работы со специальными символами регулярных выражений.
Специальные символы
- . – любой символ (кроме новой строки).
Пример: r"k.jg" найдёт «kjg». r"k..jg" – нет. - d – любая цифра.
Пример: r"d" найдёт первую цифру. r"ddd" – три цифры подряд. - D – любой символ, кроме цифры.
- s – любой пробельный символ (пробел, табуляция, перевод строки).
- S – любой символ, кроме пробельного.
- w – любая буква, цифра или знак подчеркивания.
- W – любой символ, кроме буквы, цифры или знака подчеркивания.
- b – граница слова (начало или конец). B – не граница слова.
Квантификаторы
Квантификаторы указывают количество повторений шаблона:
- * – ноль или более вхождений.
- + – одно или более вхождений.
- {n} – ровно n вхождений.
- {n,} – не менее n вхождений.
- {n,m} – от n до m вхождений.
Примеры: r"d*" (ноль или более цифр), r"d+" (одна или более цифр), r"d{3}" (три цифры).
Наборы символов
Наборы символов указываются в квадратных скобках:
- [ghijk] – любая из букв g, h, i, j, k.
- [4-8] – любая цифра от 4 до 8.
- [^4-6] – любой символ, кроме цифр 4, 5, 6.
Пример: r"[ghijk]+" найдёт одну или более букв из указанного набора.
Альтернатива
Вертикальная черта | указывает на альтернативу:
- r"f|ft" найдёт «f» или «ft».
Поиск слов, начинающихся на согласную
Найдём все слова в строке, начинающиеся на согласную букву:
string = "Привет как дела у меня нормально"
result = re.findall(r"[бвгджзйклмнпрстфхцчшщБВГДЖЗЙКЛМНПРСТФХЦЧШЩ]w+", string)
print(result)
Здесь используется re.findall() для получения списка всех совпадений. Шаблон ищет согласную букву (в верхнем и нижнем регистре), а затем любые буквы или цифры (w+).
Регулярные выражения – мощный инструмент, но требуют осторожного использования. Их применение оправдано только при необходимости. Важно помнить о сложностях в написании корректных шаблонов и тщательно их тестировать.