Sprint 63 — Регулярные выражения (Junior)
Все задачи одного уровня.
⸻
TASK-J1 — Валидация корпоративной почты
Контекст
При регистрации сотрудников HR-система должна принимать только корпоративные email.
Разрешены адреса только в домене company.com.
⸻
Данные
emails = [
"alex@company.com",
"kate@gmail.com",
"john@company.com",
"admin@yahoo.com",
"test@company.com"
]
⸻
Требования
С помощью регулярного выражения оставить только корпоративные адреса.
⸻
Ожидаемый результат
[
"alex@company.com",
"john@company.com",
"test@company.com"
]
⸻
Что проверяется
- re.findall() или re.match()
- Символы ^ и $
- Экранирование точки (.)
⸻
TASK-J2 — Извлечение номеров заказов
Контекст
Логи содержат информацию о действиях пользователей.
Нужно извлечь номера заказов.
⸻
Данные
logs = """
User created order #1001
Payment for order #1002 completed
Order #1003 cancelled
Refund for order #1004
"""
⸻
Требования
Получить список всех номеров заказов.
⸻
Ожидаемый результат
["1001", "1002", "1003", "1004"]
⸻
Что проверяется
- re.findall()
- Группы
- \d+
⸻
TASK-J3 — Проверка номера телефона
Контекст
CRM принимает номера только в формате:
+7 (999) 123-45-67
⸻
Данные
phones = [
"+7 (999) 123-45-67",
"89991234567",
"+7 (111) 555-44-33",
"+79991234567",
]
⸻
Требования
Оставить только номера, полностью соответствующие формату.
⸻
Что проверяется
- re.fullmatch()
- Квантификаторы
- Экранирование специальных символов
⸻
Sprint 63 — Регулярные выражения (Middle)
⸻
TASK-M1 — Анализ логов API
Контекст
Команда мониторинга анализирует серверные логи.
Нужно извлечь HTTP-метод, URL и код ответа.
⸻
Данные
logs = [
"GET /api/users 200",
"POST /api/orders 201",
"DELETE /api/orders/15 404",
"PUT /api/products/7 500",
]
⸻
Требования
Получить структуру:
[
("GET", "/api/users", "200"),
("POST", "/api/orders", "201"),
("DELETE", "/api/orders/15", "404"),
("PUT", "/api/products/7", "500"),
]
⸻
Что проверяется
- Группы
- re.match()
- Работа с несколькими шаблонами
⸻
TASK-M2 — Поиск SQL-запросов
Контекст
Система безопасности анализирует текстовые файлы.
Нужно найти все SQL-запросы вида:
SELECT ...
которые заканчиваются символом ;.
⸻
Данные
text = """
Some text
SELECT * FROM users;
Random line
SELECT id, name FROM products WHERE price > 100;
Another text
"""
⸻
Требования
Извлечь каждый SQL-запрос целиком.
⸻
Ограничения
Запрос может содержать любые символы между SELECT и ;.
⸻
Что проверяется
- re.DOTALL
- Ленивые квантификаторы .*?
⸻
TASK-M3 — Маскирование персональных данных
Контекст
Перед отправкой логов клиенту необходимо скрыть номера банковских карт.
⸻
Данные
text = """
User paid with card 1234-5678-9012-3456.
Backup card: 5555-4444-3333-2222.
"""
⸻
Требования
Заменить все номера карт на:
**-**-**-**
⸻
Использовать
re.sub()
⸻
Что проверяется
- Замена по шаблону
- Квантификаторы
- Группы символов
⸻
Sprint 63 — Регулярные выражения (Senior)
⸻
TASK-S1 — Парсер конфигурационного файла
Контекст
Приложение читает конфигурацию следующего вида:
HOST=localhost
PORT=5432
DEBUG=True
TIMEOUT=30
⸻
Требования
С помощью одного регулярного выражения получить словарь:
{
"HOST": "localhost",
"PORT": "5432",
"DEBUG": "True",
"TIMEOUT": "30"
}
⸻
Что проверяется
- Именованные группы
- Многострочный режим (re.MULTILINE)
⸻
TASK-S2 — Проверка сложности пароля
Контекст
Система безопасности предъявляет требования:
- минимум 10 символов;
- хотя бы одна заглавная буква;
- хотя бы одна строчная;
- хотя бы одна цифра;
- хотя бы один специальный символ из !@#$%^&*;
- без пробелов.
⸻
Данные
passwords = [
"Password123!",
"password",
"Qwerty123",
"Admin@2025",
"1234567890",
]
⸻
Требования
Используя одно регулярное выражение, определить, какие пароли удовлетворяют всем требованиям.
⸻
Что проверяется
- Lookahead ((?=...))
- re.fullmatch()
- Сложные составные шаблоны
⸻
TASK-S3 — Мини-парсер шаблонов
Контекст
В системе используются шаблоны писем:
Здравствуйте, {{name}}!
Ваш заказ №{{order_id}} готов.
С уважением,
{{company}}
⸻
Требования
Извлечь все имена переменных внутри двойных фигурных скобок.
⸻
Ожидаемый результат
[
"name",
"order_id",
"company"
]
⸻
Дополнительное требование
Регулярное выражение должно:
- извлекать только содержимое между {{ и }};
- не включать сами фигурные скобки;
- корректно работать, если в тексте встречается несколько шаблонов в одной строке.
⸻
Что проверяется
- Нежадные квантификаторы
- Группы захвата
- Практическое применение регулярных выражений для парсинга шаблонов