Регулярно требуется преобразовать какой-либо текст в максимально совместимый текст для URL, имени файла, имени объекта в каком-то софте и тд. Требования совместимости простые: в тексте должны быть только допустимые символы. Обычно это a-z, 0-9 и "_" или "-". То есть, только прописные буквы латинского алфавита и цифры (как пример).
Допустим, нам нужно название статьи в блоге преобразовать в slug для добавления его в URL этой статьи. Как это лучше всего сделать?
В Django по умолчанию есть готовая функция slugify для таких случаев.
Но я её никогда не использую. Почему? Потому что её недостаточно!
Приведём пример
>>> from django.utils.text import slugify
>>> slugify('This is a Title')
'this-is-a-title'
Пока всё отлично
>>> slugify('This is a "Title!"')
'this-is-a-title'
Спец символы удалились, всё хорошо.
>>> slugify('Это заголовок статьи')
''
Вот и приехали 😢. Если текст не английский то буквы просто игнорируются. Можно это поправить
>>> slugify('Это заголовок статьи', allow_unicode=True)
'это-заголовок-статьи'
Но тогда мы не вписываемся в условие. У нас появилась кириллица в тексте.
Так как я часто пишу сайты для русскоязычных пользователей эта проблема весьма актуальна. Я не использую стандартную функцию и всегда пишу свою.
Оригинал я не беру в расчёт и пишу полностью свою функцию. И так, по порядку:
🔸1. Исходный текст:
>>> text = 'Мой заголовок №10 😁!'
Взял специально посложней со специальными символами.
🔸2. Транслит
Необходимо сделать транслит всех символов в латиницу. Здесь очень выручает библиотека unidecode. Помимо простого транслита кириллицы в латиницу она умеет преобразовывать спец символы и иероглифы в текстовые аналоги.
from unidecode import unidecode
>>> unidecode("Ñ Σ ® µ ¶ ¼ 月 山")
'N S (r) u P 1/4 Yue Shan'
Очень крутая библиотека, советую👍
В нашем случае получаем такое преобразование:
>>> text = unidecode(text)
>>> print(text)
'Moi zagolovok No. 10 !'
Отличный транслит. Смайл просто удалился, хотя я ждал что-то вроде :). Ну и ладно, всë равно невалидные символы.
А еще наш код уже поддерживает любой язык, будь то хинди или корейский.
🔸4. Фильтр символов
Unidecode не занимается фильтрацией по недопустимым символам. Это мы делаем в следующем шаге через regex. Просто заменим все символы на "_" если они вне указанного диапазона.
>>> text = re.sub(r'[^a-zA-Z0-9]+', '_', text)
>>> print(text)
'Moi_zagolovok_No_10_'
Символ "+" в паттерне выручает когда несколько недопустимых символов идут рядом. Все они заменяются на один символ "_".
🔸5. Slugify
Осталось удалить лишние символы по краям и сделать нижний регистр
>>> text = text.strip('_').lower()
>>> print(text)
'moi_zagolovok_no_10'
Получаем отличный slug! 😎
🌎 Полный код в виде функции.
______________
PS. Проверку что в строке остался хоть один допустимый символ я бы вынес в отдельную функцию.
#libs#tricks#django
Curated Crypto | ꘜ
👛Q2 2025 just hit a $10 BILLION milestone in crypto VC funding. Link.
But this isn’t hype chasing. It’s smart, disciplined money flowing into compliance-first, infrastructure plays that are built to last!
Author: Green But Red
#VC
Денис Мантуров объявил о переводе экономики на новый технологический уклад и усилении позиций России в космосе
Будущий первый вице-премьер выступил на заседании комитета Госдумы по промышленности и торговле и обозначил приоритетные направления технологического развития и господдержки:
🌌Расширение спутниковых группировок
🌌Создание новых ракет-носителей на альтернативном топливе, в том числе многоразовых
🌌Развитие инфраструктуры космодромов
🌌Разработка программ исследования дальнего космоса
🌌Строительство российской орбитальной станции
🌇Выпуск промышленных роботов
🌇Формирование полного производственного цикла по химической продукции
🌇Локализация электроники
🌇Создание гражданского транспорта
🌇Наращивание возможностей предприятий оборонно-промышленного комплекса
Заявления о гос.поддержке развития космоса - позитивный сигнал для инвесторов в космические проекты. В портфеле нашего фонда сейчас 2 spacetech-проекта: в 2023 г. мы выделили на первый этап их развития до 250 млн руб. Обе команды занимаются разработкой ракет сверхлегкого класса для доставки полезной нагрузки массой до 300 кг груза на солнечно -синхронную орбиту.
#космос#vc
@voskhodvc - канал венчурного фонда "Восход"
https://amp.rbc.ru/rbcnews/economics/12/05/2024/6640e7c49a79479eaf1ce780?utm_source=amp_textincutes
Табличка по #Web3 проектам закрывшие раунды в июне 2023.
Мой фаворит - Maverick Protocol новый DEX с концентрированной ликвидностью. Над похожим решением и мы сейчас работаем.
#инвестиции#vc
💎 Глобальная карта инвестиционного риска в 2026 году от VC
Соотношение риска и доходности на глобальных рынках существенно различается. По оценкам профессора Асват Дамодаран, премия за риск отражает дополнительную доходность, которую инвесторы требуют за вложения в конкретную страну: чем выше показатель, тем выше воспринимаемый риск.
⚖️ Оценка основана на кредитных рейтингах стран и ставках заимствования; при отсутствии ликвидного долгового рынка используются сравнительные показатели фондовых индексов развивающихся стран.
Наиболее высокие премии за риск (до 30,9%) характерны для стран с военными конфликтами, санкциями и экономической нестабильностью — таких как Беларусь, Ливан, Судан и Венесуэла. В группе повышенного риска (около 19,8%) также находятся Куба, Украина, Сирия и Йемен.
🌱 К числу наиболее стабильных рынков относятся Канада, Германия, Швейцария, Сингапур, Швеция и Нидерланды с премией на уровне ~4,2%. В 🇺🇸США показатель немного выше — 4,5%, оставаясь при этом в группе стран с минимальным риском (менее 5%).
🇺🇿 Премия за риск у Узбекистана составила 8,9%. Аналогичный показатель у Турции, Армении, Непала и Македонии. В то же время у 🇷🇺России данный показатель на уровне 8,1%, а у 🇰🇿Казахстана — 6,3%.
—
💎 VC'dan 2026-yilda global investitsiya xavflari xaritasi
Global bozorlarda risk va daromadlilik nisbati sezilarli darajada farq qiladi. Professor Asvat Damodaran baholashlariga ko‘ra, risk mukofoti investorlar ma’lum bir mamlakatga sarmoya kiritish uchun talab qiladigan qo‘shimcha daromadni anglatadi: ko‘rsatkich qanchalik yuqori bo‘lsa, qabul qilinadigan risk ham shunchalik yuqori bo‘ladi.
⚖️ Baholash mamlakatlarning kredit reytinglari va qarz olish stavkalariga asoslangan; agar likvid qarz bozori mavjud bo‘lmasa, rivojlanayotgan mamlakatlar fond indekslarining solishtirma ko‘rsatkichlaridan foydalanilgan.
Eng yuqori risk mukofotlari (30,9% gacha) harbiy mojarolar, sanksiyalar va iqtisodiy beqarorlik kuzatilayotgan mamlakatlarga xos — masalan, Belarus, Livan, Sudan va Venesuela. Yuqori risk guruhiga (taxminan 19,8%) Kuba, Ukraina, Suriya va Yaman ham kiradi.
🌱 Eng barqaror bozorlar qatoriga Kanada, Germaniya, Shveysariya, Singapur, Shvetsiya va Niderlandiya kiradi, bu yerda risk mukofoti ~4,2% darajasida. 🇺🇸AQShda bu ko‘rsatkich biroz yuqoriroq — 4,5%, ammo baribir minimal riskli mamlakatlar (5% dan past) guruhida qolmoqda.
🇺🇿 O‘zbekiston uchun risk mukofoti 8,9%ni tashkil etdi. Shunga yaqin ko‘rsatkichlar Turkiya, Armaniston, Nepal va Makedoniyada ham kuzatilmoqda. Shu bilan birga, 🇷🇺Rossiyada bu ko‘rsatkich 8,1%, 🇰🇿Qozog‘istonda esa 6,3% darajasidadir.
📈#рынки#VC
#KBW The Korean Blockchain Week starts today. Meet our partners Heng Lee and Stefano Virgilli @stefanovirgilli to share your funding goals. @DwfLabs is much more than a #web3#VC
CleanSpark Holds 10,000 Bitcoin!
CleanSpark, a publicly traded company, has surpassed 10,000 #Bitcoin in its balance sheet. This significant investment positions them strongly in the cryptocurrency market.
#Bitcoin#Crypto#VC
Crypto Buzz: Bitcoin Reaches $93,000!
Bitcoin surges to $93,000. Jack Mallers dismisses comments from Jeffrey Epstein's former banker regarding Bitcoin's value.
Stay updated for more crypto news!
#Bitcoin#Crypto#VC