Перейти к основному контенту
Tech Path Finder
КурсыИнтервьюКод-ревьюБлог
Tech Path Finder

Персонализированный путеводитель в IT. Квизы, мок-интервью, код ревью и аналитика прогресса.

@potapov_me

Платформа

  • Курсы
  • Прогресс
  • Мок-интервью
  • Код ревью
  • Живое ревью с ИИ
  • Тренажёр переговоров
  • Закладки

Контент

  • Блог
  • Главная
  • Обратная связь

Компания

  • О проекте
  • Тарифы
  • Условия использования
  • Конфиденциальность
  • Согласие на обработку данных
  • Cookie
  • Реквизиты

Аккаунт

  • Войти
  • Зарегистрироваться
  • Профиль

© 2026 Tech Path Finder. Все права защищены.

·ИП Потапов К.С.·Политика конфиденциальности·
Сделано с ❤️ в России
  1. Введение в регулярные выражения
intro

Введение в регулярные выражения

Что такое regex, зачем нужен, базовые концепции и области применения

Введение в регулярные выражения

Регулярные выражения — это язык описания шаблонов текста. Один хорошо написанный regex может заменить десятки строк кода с циклами и условиями.

#Что такое регулярные выражения

Регулярное выражение (regex, regexp) — это последовательность символов, которая определяет шаблон для поиска в тексте.

Регулярные выражения используются для:

  • Поиска — найти все email в тексте
  • Извлечения — вытащить номер телефона из строки
  • Валидации — проверить, что строка соответствует формату
  • Замены — заменить все даты на формат DD.MM.YYYY

#Зачем нужны regex в Python

Рассмотрим задачу: найти все email-адреса в тексте.

Без regex (много кода, сложно):

text = "Контакты: support@example.com и sales@test.org" emails = [] for word in text.split(): if '@' in word and '.' in word: parts = word.split('@') if len(parts) == 2 and '.' in parts[1]: emails.append(word) print(emails) # ['support@example.com', 'sales@test.org']

С regex (одна строка):

import re text = "Контакты: support@example.com и sales@test.org" emails = re.findall(r'[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}', text) print(emails) # ['support@example.com', 'sales@test.org']

#Где применяются регулярные выражения

#1. Валидация данных

# Проверка email is_valid = bool(re.match(r'^[\w.-]+@[\w.-]+\.\w+$', email)) # Проверка телефона is_valid = bool(re.match(r'^\+7\d{10}$', phone)) # Проверка пароля (минимум 8 символов, буквы и цифры) is_valid = bool(re.match(r'^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d]{8,}$', password))

#2. Парсинг логов

log_line = "2024-03-09 14:30:15 ERROR [main] Database connection failed" # Извлечение уровня логирования и сообщения match = re.search(r'(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}) (\w+) \[(\w+)\] (.+)', log_line) if match: timestamp, level, logger, message = match.groups()

#3. Извлечение данных из HTML

html = '<a href="https://example.com">Link</a>' # Извлечение URL url = re.search(r'href="([^"]+)"', html).group(1) # 'https://example.com'

#4. Очистка и нормализация текста

text = "Цена: 1 234,56 руб." # Удаление пробелов и замена запятой на точку price = re.sub(r'\s+', '', text) # "Цена:1234,56руб." price = re.sub(r',', '.', price) # "Цена:1234.56руб." # Извлечение числа value = float(re.search(r'[\d.]+', price).group()) # 1234.56

#5. Парсинг структурированных данных

data = "Order #12345: $99.99; Order #67890: $149.50" # Извлечение всех заказов orders = re.findall(r'Order #(\d+): \$(\d+\.\d{2})', data) # [('12345', '99.99'), ('67890', '149.50')]

#Как работают регулярные выражения

Регулярное выражение состоит из:

  1. Литералы — обычные символы, соответствующие самим себе

    re.search(r'cat', 'The cat sat') # Найдёт 'cat'
  2. Метасимволы — символы со специальным значением

    re.search(r'c.t', 'cat') # '.' — любой символ re.search(r'c*t', 'ccct') # '*' — ноль или более
  3. Классы символов — наборы допустимых символов

    re.search(r'[aeiou]', 'hello') # Любая гласная re.search(r'\d+', 'abc123') # \d — цифра

#Синтаксис regex в Python

В Python регулярные выражения определяются через модуль re:

import re # Компиляция паттерна (рекомендуется для повторного использования) pattern = re.compile(r'\d+') # Поиск result = pattern.search('abc123def')

#Сырые строки (raw strings)

Для regex в Python рекомендуется использовать сырые строки с префиксом r:

# Правильно — обратная косая черта не экранируется Python pattern = r'\d+\.\d+' # Неправильно — нужно экранировать обратную косую черту pattern = '\\d+\\.\\d+'

Сырые строки делают regex более читаемыми и менее подверженными ошибкам.

#Основные функции модуля re

ФункцияОписание
re.match(pattern, string)Поиск в начале строки
re.search(pattern, string)Поиск по всей строке
re.findall(pattern, string)Найти все совпадения
re.finditer(pattern, string)Итератор по совпадениям
re.sub(pattern, repl, string)Замена совпадений
re.split(pattern, string)Разбиение строки
re.compile(pattern)Компиляция паттерна

#Пример: комплексное использование

import re text = """ Контакты компании: Email: info@company.com, support@company.co.uk Телефон: +7 (495) 123-45-67, +7-800-555-35-35 Сайт: https://www.company.com """ # Извлечение email emails = re.findall(r'[\w.-]+@[\w.-]+\.\w+', text) # Извлечение телефонов phones = re.findall(r'\+7[\s()\-0-9]{10,}', text) # Извлечение URL urls = re.findall(r'https?://[\w./-]+', text) print(f"Email: {emails}") print(f"Телефоны: {phones}") print(f"URL: {urls}")

#Когда НЕ стоит использовать regex

  1. Парсинг HTML/XML — используйте BeautifulSoup, lxml

    # Плохо: re.search(r'<title>(.*)</title>', html) # Хорошо: from bs4 import BeautifulSoup soup = BeautifulSoup(html, 'html.parser') title = soup.title.string
  2. Сложные вложенные структуры — regex не может парсить рекурсивные структуры

  3. Простые задачи — если можно сделать через str.split(), str.replace() — делайте так

#Инструменты для обучения

  • regex101.com — онлайн-тестер с поддержкой Python и объяснением синтаксиса
  • pythex.org — специфично для Python
  • regexr.com — визуальный конструктор

Далее: Базовый синтаксис