Регулярно требуется преобразовать какой-либо текст в максимально совместимый текст для 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
Earlier in June, IRAS Deputy Commissioner Quek Su Lynn led our Transfer Pricing Dispute Resolution team to the inaugural SGATAR Competent Authority Forum 2025 in Seoul, South Korea.
The Forum brought together tax administrators from across Asia-Pacific to share insights on Mutual Agreement Procedures (MAPs) and Advance Pricing Arrangements (APAs). Our team presented Singapore's best practices and engaged in meaningful discussions on key issues, including multilateral APAs and arbitration procedures.
These exchanges with other jurisdictions provided fresh insights to enhance our work in dispute prevention and resolution. We also had the opportunity to hear directly from private sector representatives, who shared important taxpayer perspectives.
The Forum proved invaluable in strengthening regional partnerships and fostering collaboration among SGATAR members, reinforcing the value of open communication and mutual trust in international tax administration.
#lifeatIRAS#internationaltax#regionalcooperation
As a panellist in the session on the implementation of the Crypto-Asset Reporting Framework (CARF) and amended Common Reporting Standard (CRS), Danny shared key elements of Singapore’s implementation strategy. We greatly benefited from the open sharing by other participants and made valuable new connections with fellow tax administrators, which will help drive our work to effectively implement internationally agreed tax transparency standards.
#lifeatIRAS#internationaltax#regionalcooperation
ℹ Did you know that Kyrgyzstan is a founding member of Shanghai Cooperation Organization (SCO)? 🇰🇬
Along with China, Kazakhstan, Russia, Tajikistan, and Uzbekistan, we established this crucial regional platform in 2001!
Now, the Kyrgyz Republic is proud to hold the prestigious Chairmanship of the Shanghai Cooperation Organization for the 2025-2026 period!
We are steering the SCO agenda under the dynamic slogan: "25 Years of the SCO: Together Towards Sustainable Peace, Development, and Prosperity."
This chairmanship is a testament to our commitment to regional stability and comprehensive cooperation.
Follow our page for updates on high-level meetings and initiatives planned during Kyrgyzstan's Chairmanship!
#Kyrgyzstan#SCOChairmanship#SCO#ShanghaiCooperationOrganization#CentralAsia#Diplomacy#RegionalCooperation
LinkedIn | Instagram | X (Twitter) | Facebook | YouTube
🚀 Colombia to Implement 100% Tariffs on Ecuadorian Imports Amid Diplomatic Strain
Colombia has announced plans to impose 100% tariffs on imports from Ecuador, escalating trade and diplomatic tensions between the two nations. Bloomberg posted on X, highlighting the growing discord between Colombian President Gustavo Petro and Ecuadorian President Daniel Noboa. The decision marks a significant shift in the trade relationship between the neighboring countries, potentially impacting economic ties and regional cooperation. The move comes amid broader geopolitical challenges in the region, with both leaders navigating complex domestic and international pressures. The tariff imposition is expected to affect various sectors, including agriculture and manufacturing, as businesses and consumers brace for potential disruptions. Observers are closely monitoring the situation, anticipating further developments in the diplomatic standoff.
#Colombia#Ecuador#Tariffs#TradeWar#DiplomaticTensions#GustavoPetro#DanielNoboa#EconomicImpact#RegionalCooperation#Agriculture#Manufacturing
😀🌊 Трансграничная река — региональные возможности: почему Иртыш важен
Иртыш — это больше, чем река. Это общий стратегический ресурс, объединяющий Китай, Казахстан и Россию в области водопользования, энергетики, сельского хозяйства и торговли.
🔹В Китае Иртыш обеспечивает развитие быстрорастущего региона Синьцзян, население которого с 1990 г. почти удвоилось.
🔹В Казахстане от Иртыша зависят 30% населения, орошается 45% сельскохозяйственных земель и вырабатывается 10% электроэнергии страны.
🔹Для России Иртыш является основным источником воды для города Омск.
Однако этот важный трансграничный ресурс сталкивается с серьезными вызовами. Увеличение водозабора в верховьях Иртыша в Китае и климатические изменения угрожают стабильности стока, качеству воды и выработке энергии в низовьях. Без своевременного реагирования эти факторы могут подорвать региональную безопасность, экономическую устойчивость и экологическое равновесие.
В видеоролике к этому посту Евгений Винокуров, заместитель председателя Правления и главный экономист ЕАБР, предлагает ряд решений, способных обеспечить устойчивое и взаимовыгодное использование водных ресурсов Иртыша в интересах всех стран бассейна.
🤝Сбалансированный и совместный подход позволит превратить Иртыш в двигатель устойчивого развития и региональной интеграции.
🔗 Подробнее — в новом отчете ЕАБР
#Irtysh#WaterSecurity#Kazakhstan#China#Russia
#TransboundaryWater#SustainableDevelopment
#RegionalCooperation
#Energy#Agriculture#TransportCorridor#CentralAsia
#Eurasia