Python: Регулярки. Урок 13. Извлечение номеров

Продолжаем изучение регулярных выражений в 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+).

Регулярные выражения – мощный инструмент, но требуют осторожного использования. Их применение оправдано только при необходимости. Важно помнить о сложностях в написании корректных шаблонов и тщательно их тестировать.

Что будем искать? Например,программа