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