Регулярно требуется преобразовать какой-либо текст в максимально совместимый текст для 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
📢Годовое общее собрание акционеров 💳ОАО «Мбанк»
ОАО «Мбанк» официально уведомляет о проведении годового общего собрания акционеров.
Главное о встрече:
Дата и время: 24 апреля 2026 года в 10:00.
Регистрация: с 09:00 до 10:00.
Место: г. Бишкек, ул. Горького, 1/2, «IT Hub Technopark», конференц-зал Flutter.
Список акционеров: составляется по состоянию на 20 апреля 2026 года.
Ключевые вопросы повестки дня:
Итоги 2025 года: утверждение отчетов Совета директоров, годового баланса и заключения внешнего аудитора.
Дивиденды: принятие решения о размере, порядке и форме выплаты дивидендов за 2025 год.
Развитие капитала: увеличение уставного капитала за счет нераспределенной прибыли 2025 года, а также через закрытое размещение дополнительных акций.
Стратегия и мотивация: утверждение финансового плана на 2026 год и программы долгосрочной мотивации сотрудников.
Обновление документов: утверждение новых редакций Устава, Кодекса корпоративного управления и Положения о Совете директоров.
Аудит: избрание внешнего аудитора на 2026 год и определение его вознаграждения.
#MBANK#KAKB@kgsinvest
Подготовил разбор финансового отчета за 2025 год 💳 ОАО «Мбанк» https://invest.kg/reports/mbank2025/
Смотрим как изменилась за год структура доходов.
Сильного роста нет, но зато успешно справляются с замещением выпадающих доходов от валютных операций.
В закрепе также есть ссылка на более полный анализ банка, но с более старыми финансовыми показателями.
Последние сделки на бирже за декабрь-январь с 04.12.2025 по 28.01.2025:
В торгах участвовали выпуски 24-27 простых акций 💳 ОАО «Мбанк» (тикеры KAKB24, KAKB25, KAKB26, KAKB27).
Всего сделок: 10
Общий оборот: 669 278 сом
Всего акций прошло через торги: 30 233 шт.
Диапазон цен за период: 20 – 24 сом
Средняя цена за период: 22,15 сом
#МБАНК#KAKB#MBANK
@kgsinvest
Заметил, что в MINVEST от 💳 Мбанк завезли возможность покупки крипты. Пока доступны только 🎲 Bitcoin, 🎲Etherium, 🎲Tron и 🎲USDT. Есть вывод на внешние кошельки.
#MBANK#KAKB#МБАНК
Вчера на сайте 📈 КФБ опубликовали отчеты за 1 квартал 2026 💳 Мбанк и 🛃 Аэропорты Кыргызстана.
——
Мой разбор этих отчетов будет после майских праздников, т.к. буду в путешествии и почти без интернета.
#MBANK#KAKB#АэропортыКыргызстана#MAIR@kgsinvest
📈 Итоги торгов на Кыргызской фондовой бирже за 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
👍 Нравится формат? Поддержите реакцией.