- Регулярки сложно читать и сложно писать
- Приведу пару альтернатив регуляркам + дам пару советов как проще писать регулярки
Решение типовых задач
- Часто регулярки используют для решения типовых задач: парс телефонов, почт, дат
- На все эти задачи есть более robust решения:
python-dateutil
— для парса датphonenumbers
— для парса телефоновemail-validator
— для парса почт- Либы для парсинга также содержат типовые парсеры: так
pydantic
умеет парсить урлы, цвета, карты и прочее
Есть тулы мощнее регулярок
parse
— как раз такой пример:
- По базе предоставляет более читаемый синтаксис чем регулярки:
r = parse("Bring out the holy {item}", "Bring out the holy hand grenade") print(r) <Result () {'item': 'hand grenade'}>
- Можно еще и делать мощные штуки: напр. парсить определенные слова в bool
yesno_mapping = { "yes": True, "no": False, "on": True, "off": False, "true": True, "false": False, } @with_pattern(r"|".join(yesno_mapping)) def parse_yesno(text): return yesno_mapping[text.lower()]
Если очень надо
Если очень надо написать регулярку, то упростить процесс их написания помогут:
- Чекеры регулярок, типа regex101
- Чекер регулярок прям в IDE
- Конечно же писать юнит-тесты
- Мы же вошли в эпоху AI — так что имеет смысл спросить совета у AI
- Всегда полезно обновить знания по регуляркам:
- Напр. кол-во повторяющийся символов можно указать в скобках:
\d{3}
- А для матчинга любого символа нужно использовать специальный флаг —
re.DOTALL
- Напр. кол-во повторяющийся символов можно указать в скобках: