✅ Решения

⚡ Кратко

Ответы на квиз: 1-c,b,a,d; 2 — нужен r"..."; 3-c; 4-b,a,c,d; 5-c. Практика: пароль проверяется четырьмя regex, IP фильтруется по диапазону 0–255.

Ответы на квиз

  1. 1-c, 2-b, 3-a, 4-d\d+ ищет цифры, [a-zA-Z0-9]+ — буквы и цифры, \s+ — пробелы, [^a-zA-Z0-9]+ — всё остальное.
  2. Строка шаблона должна быть с r: re.findall(r"\d+", "Value: 123").
  3. c<.*?> использует ленивый квантификатор *?.
  4. 1-b, 2-a, 3-c, 4-d^ начало, $ конец, \b граница слова, \B не граница слова.
  5. cre.match() проверяет только начало строки, re.search() ищет в любой части.

Решение 1. Проверка пароля

# password_check.py
import re


def is_password_strong(password: str) -> bool:
    return (
        len(password) >= 8
        and re.search(r"[A-Z]", password) is not None
        and re.search(r"[a-z]", password) is not None
        and re.search(r"\d", password) is not None
    )


if __name__ == "__main__":
    user_password = input("Введите пароль: ")
    if is_password_strong(user_password):
        print("Пароль надёжен.")
    else:
        print("Пароль не соответствует требованиям.")

Логика: каждое re.search проверяет наличие одного из требуемых классов символов. Длина проверяется обычной функцией len, потому что для неё не нужен regex.

Решение 2. Извлечение IPv4-адресов

# extract_ips.py
import re


def extract_ipv4(text: str) -> list[str]:
    pattern = r"\b(?:[0-9]{1,3}\.){3}[0-9]{1,3}\b"
    candidates = re.findall(pattern, text)
    return [
        ip for ip in candidates
        if all(0 <= int(part) <= 255 for part in ip.split("."))
    ]


if __name__ == "__main__":
    text = (
        "Server1: 192.168.1.1, Server2: 10.0.0.254, "
        "Invalid: 999.123.456.78"
    )
    for ip in extract_ipv4(text):
        print(ip)

Логика: регулярка находит кандидатов, похожих на IPv4, а дополнительная проверка отсеивает числа больше 255. В production для валидации IP удобнее использовать ipaddress.ip_address.

Проверить по докуентации: для надёжной валидации IP-адресов в production рекомендуется использовать стандартный модуль ipaddress.