Регулярно требуется преобразовать какой-либо текст в максимально совместимый текст для 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
❗️🇷🇺#ELFV#spo
акционеры ЭЛ5-Энерго одобрили реорганизацию ПАО «ЭЛ5-Энерго» в форме присоединения к нему АО «ВДК-Энерго» и ООО «ЛУКОЙЛ-Экоэнерго
в целях реорганизации одобрили допэмиссию на 26 958 745 240 акций
цена выкупа для несогласных = 0,5653 РУБ/АКЦ
релиз
❗️🇷🇺#MVID#spo
МВидео объявляет о начале реализации с 25 марта 2026 года преимущественного права акционеров в рамках допэмиссии
Компания уведомляет действующих на 19 сентября 2025 года акционеров Компании о том, что начиная с 25 марта 2026 года у них есть возможность реализовать преимущественное право приобретения акций ПАО «М.видео» в рамках реализации дополнительной эмиссии по открытой подписке.
Привлеченные средства от допэмиссии будут направлены на развитие ключевых направлений бизнеса Компании, включая реализацию новой стратегии по построению мультикатегорийного маркетплейса с развитой офлайн-розницей. Допэмиссия также завершит процесс дофинансирования Компании в объеме 30 млрд рублей от действующих акционеров. Предельный объем допэмиссии – 1,5 млрд обыкновенных акций, реальный объем может составлять кратно меньшую цифру относительно максимального числа акций к размещению.
⚠️🇷🇺#LIFE#spo
ПАО "Фармсинтез" (Ленинградская область) во втором полугодии 2026 года намерено провести дополнительную эмиссию обыкновенных акций, которые планируется разместить по открытой подписке, сообщается в пояснениях к отчету компании по РСБУ — ИФ
mt в max
❗️🇷🇺#ELN#spo
«Эталон» объявляет о начале сбора заявок на участие в SPO на Московской бирже
Ценовой ориентир в рамках SPO составляет 46 руб/акц
Сбор предварительных заявок в рамках Размещения продлится с 26 января по 9 февраля 2026 года включительно.
В рамках SPO Компания может разместить до 400 млн обыкновенных акций дополнительного выпуска для привлечения целевого объема средств в размере до 18,4 млрд руб. Итоговое количество размещаемых Акций будет объявлено по итогам SPO.
Все денежные средства, привлеченные в рамках SPO, поступят в Компанию (100% cash-in). Из них 14,1 млрд рублей Компания намерена направить на финансирование стратегической сделки по приобретению АО «Бизнес-Недвижимость»
релиз
в акциях Эталон планка
Сегодня был последний день приема заявок от акционеров на участие в закрытой доп. эмиссии 🛃 ОАО «Аэропорты Кыргызстана» (7-й выпуск, MAIR7). Акции можно было приобрести по номинальной
стоимости 424,0657 сом через брокера 📈 ОсОО «Фридом Финанс».
#MAIR#SPO#АэропортыКыргызстана
@kgsinvest
«окно Кыргызстана в мир» становится шире.
Финансовый анализ 🛃 ОАО «Аэропорты Кыргызстана»
Закрываю свои «долги» перед Новым Годом. Заглянул под капот и подготовил болшой финансовый обзор компании ОАО «Аэропорты Кыргызстана» с учетом данных за последние 9 месяцев и экономического эффекта от грядущего SPO https://invest.kg/analytics/airports-of-kyrgyzstan/
Государство усиливает свою долю, а миноритарии получают меньше контроля и пропорционально меньше будущей прибыли. Cтоит ли покупать или наоборот избавляться от акций? Имеет ли смысл участвовать в SPO MAIR7?
@kgsinvest
#АэропортыКыргызстана#MAIR#SPO#AsmanAirlines#аналитика
Нравятся большие обзоры? Ставь 👍
📈 Итоги торгов на Кыргызской фондовой бирже за 16.02-20.02 2026
🔹 Объем торгов: 3,66 млрд сом
🔹 Первичный рынок: 3.66 млрд сом
🔹 Вторичный рынок: 2,69 млн сом.
🔹 Объем торгов USD: 1,100 USD
🔹 Первичный рынок USD: 1,100 USD
💼СДЕЛКИ
📊Акции:
🔝🪙🇰🇬 ОАО Государственный финансовый холдинг (GSFH4)
▫️ Объем: 3,500,000,000 сом (3.5 млрд. сом)
▫️ Цена: 1,000 сом
▫️ Количество акций: 3,500,000 шт
▫️ Сделок: 1
🔝💳 ОАО МБанк (KAKB, KAKB16, 18-27)
▫️ Объем: 711,060 сом
▫️ Цена: 20 сом
▫️ Количество акций: 35,553 шт
▫️ Сделок: 20
🛃 ОАО Аэропорты Кыргызстана (MAIR выпуски 3,5,6)
▫️ Объем: 348,696 сом
▫️ Цена: 500-516 сом (средняя 505.36 сом)
▫️ Количество акций: 690 шт
▫️ Сделок: 9
🛍 ОАО ЦУМ Айчурек (AICH4, AICHp2)
▫️ Объем: 21,114 сом
▫️ Цена: 51 сом
▫️ Количество акций: 414 шт
▫️ Сделок: 2
👚ОАО Айгул (г. Бишкек), акция простая (AIGL)
▫️ Объем: 15,000 сом
▫️ Цена: 600 сом
▫️ Количество акций: 25 шт
▫️ Сделок: 1
⚡️ ОАО Национальная электрическая сеть Кыргызстана (NESK)
▫️ Объем: 5,000 сом
▫️ Цена: 0.5 сом
▫️ Количество акций: 10,000 шт
▫️ Сделок: 1
💵Облигации:
🔝🪙🇰🇬 ГКВ-12 месячные
▫️ Объем: 139,599,296 сом (139.6 млн. сом)
▫️ Цена: 90.4 сом
▫️ Количество облигаций: 1,544,240 шт
▫️ Сделок: 3
🪙🏦 ОАО Дос-Кредобанк
Субординированные облигации (DKRBb2)
▫️ Объем: 22,381,000 сом
▫️ Цена: 1,000 сом
▫️ Количество облигаций: 22,381 шт
▫️ Сделок: 29
🔝🏗 ОсОО Первая Металлобаза (PMTBb8)
▫️ Объем: 1,544,126 сом
▫️ Цена: 5,113 сом
▫️ Количество облигаций: 302
▫️ Сделок: 2
🍬ОАО Каинды Кант, облигации USD (KKNTb2)
▫️ Объем сделки: 1,100 USD
▫️ Цена: 100 USD
▫️ Количество облигаций: 11 шт
▫️ Сделок: 2
🏦 ОАО МФК ИнвесКор СА (INVCb)
▫️ Объем: 41,000 сом
▫️ Цена: 1,000 сом
▫️ Количество облигаций: 41 шт
▫️ Сделок: 1
Оборот на вторичном за неделю рынке всего 2.69 млн. сом.
Первичный рынок стабильно формирует основной оборот КФБ, особенно в государственном и долговом сегментах. После завершения SPO капитализация государственного финансового холдинга (GSFH) выросла с 5.4 млрд сомов до 8.9 млрд сомов. На первичном рынке реализовали субординированные облигации ОАО «Дос-Кредобанк» на 22.4 млн сомов.
Акции остаются низколиквидными. Освновные обороты пришлись на 💳 ОАО МБанк (KAKB) и 🛃ОАО Аэропорты Кыргызстана (MAIR).
📈 Freedom Broker завершил размещение акций 🛃 ОАО «Аэропорты Кыргызстана» на 9.5 млрд сомов. Всего в рамках седьмого выпуска (MAIR7) было размещено свыше 22.5 млн простых именных акций. Госфиннадзор уже признал итоги. Рыночная цена акций сейчас на уровне 500 сом за шт.
🛫🇨🇳 China Southern Airlines запускает прямые рейсы между Гуанчжоу и Бишкеком.
@kgsinvest#итогинедели#SPO#MAIR#MBANK#KAKB
👍 Нравится формат? Поддержите реакцией.