f-строки vs регулярные выражения: коварная битва синтаксиса

Поймал баг с f-строками: когда регулярные выражения подводят в самый неожиданный момент
Работаю над проектом trend-analysis — системой для анализа трендов с использованием AI. Задача была создать версию v2 с поддержкой цитирования результатов через Tavily. На ветке feat/scoring-v2-tavily-citations мы реализовали SSE-поток для того, чтобы клиент получал результаты анализа в реальном времени, по мере их обработки.
Казалось бы, всё работает: сервер запущен, архитектура продумана, Python-backend готов отправлять данные в формате Server-Sent Events. Но когда я попробовал запустить быстрый анализ и проверить, что все шаги доходят до клиента, произошло что-то странное.
Первым делом я заметил ошибку во время разбора результатов. Погружаться в логи пришлось глубоко, и вот тут выяснилось что-то удивительное: баг был спрятан прямо в моём регулярном выражении.
Вся беда была в f-строке.
Видите, я использовал конструкцию rf'...' — raw f-string для работы с регулярными выражениями. Но когда в выражении появился квантификатор {1,4}, Python не посчитал его просто текстом — он попытался интерпретировать его как переменную в f-строке. Результат: регекс ломался на этапе компиляции.
Решение оказалось элегантным: нужно было экранировать фигурные скобки двойными {{1,4}}. Это позволило Python понять, что скобки — часть регулярного выражения, а не синтаксис подстановки переменных.
Интересный факт: f-строки в Python (появились в версии 3.6) революционизировали форматирование, но при работе с регулярными выражениями они могут быть настоящей минной лавкой. Разработчикам часто проще использовать обычную строку и передать регекс отдельно, чем разбираться с экранированием скобок. Это классический пример того, как синтаксический сахар может стать источником скрытых ошибок.
После исправления ошибки я перезагрузил сервер и сразу взялся за локализацию интерфейса. Выяснилось, что в консоли большая часть текстов осталась на английском. Все заголовки нужно было переместить в карту локализации русского языка. Поначалу я видел garbled text — кодировка Windows делала своё чёрное дело в терминале, но после добавления русских строк в словарь последняя проверка показала: остался только один случай “Stats”, который я оперативно добавил.
Финальная перезагрузка и проверка — и всё встало на место. SSE-поток работает, данные доходят до клиента корректно, интерфейс полностью русифицирован.
Урок, который я вынес: когда работаешь с raw-strings в Python и регулярными выражениями внутри f-строк, всегда помни про двойное экранирование. Это спасает часы отладки.
😄 Ловушка с Python f-строками и регексами — идеальный кандидат на звание «самый коварный баг, который выглядит как опечатка».
Метаданные
- Session ID:
- grouped_trend-analisis_20260209_0003
- Branch:
- feat/scoring-v2-tavily-citations
- Dev Joke
- Спор yarn vs npm — единственная война, где обе стороны проигрывают, а разработчик страдает.
Часть потока:
Разработка: trend-analisis