🏠 Домашнее задание 31

⚡ Кратко

Найти даты в форматах DD/MM/YYYY, DD-MM-YYYY, DD.MM.YYYY и разделить строку тегов по запятым, точкам с запятой, слэшам и пробелам.

Задача 1. Извлечение дат

Реализуйте программу, которая находит в тексте все даты в форматах DD/MM/YYYY, DD-MM-YYYY и DD.MM.YYYY.

Данные

text = (
    "The events N 123456 happened on 15/03/2025, 01.12.2024 and "
    "09-09-2023. Deadline: 28/02/2022."
)

Пример вывода

15/03/2025
01.12.2024
09-09-2023
28/02/2022

Решение

# extract_dates.py
import re


def extract_dates(text: str) -> list[str]:
    pattern = r"\b\d{2}[/.-]\d{2}[/.-]\d{4}\b"
    return re.findall(pattern, text)


if __name__ == "__main__":
    text = (
        "The events N 123456 happened on 15/03/2025, 01.12.2024 and "
        "09-09-2023. Deadline: 28/02/2022."
    )
    for date in extract_dates(text):
        print(date)

Разбор: \d{2} — день и месяц, [/.-] — один из разделителей, \d{4} — год. Символ - внутри [...] стоит последним, поэтому не требует экранирования.

Задача 2. Разделение списка тегов

Прочитайте строку с тегами, разделите их по запятым, точкам с запятой, слэшам или пробелам, удалите лишние пробелы и пустые значения.

Данные

tag_input = "python, data-science / machine-learning; AI  neural-networks"

Пример вывода

['python', 'data-science', 'machine-learning', 'AI', 'neural-networks']

Решение

# split_tags.py
import re


def split_tags(tag_input: str) -> list[str]:
    parts = re.split(r"[,;\s/]+", tag_input)
    return [part.strip() for part in parts if part.strip()]


if __name__ == "__main__":
    tag_input = "python, data-science / machine-learning; AI  neural-networks"
    print(split_tags(tag_input))

Разбор: класс символов [,;\s/]+ задаёт любой из разделителей в любом количестве. part.strip() убирает лишние пробелы, а условие if part.strip() отбрасывает пустые строки.

Как проверить в VS Code

  1. Создайте файл с решением (например, extract_dates.py).
  2. Вставьте тестовые данные из условия.
  3. Запустите: python extract_dates.py
  4. Сравните вывод с примером из задания.
Проверить по докуентации: в production для валидации дат лучше использовать datetime.strptime или модуль datetime, а не только regex; для простого разделения по одному символу иногда достаточно метода str.split.