Регулярно требуется преобразовать какой-либо текст в максимально совместимый текст для 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
Live: Dazzling nightscape at Shanghai's Yangpu Riverside
As APEC's host again after a 12-year interval, China is holding the Second Senior Officials' Meeting and related #APEC meetings in Shanghai. As night falls, the Yangpu Riverside in Shanghai comes alive with dazzling lights. The shimmering river reflects rows of towering skyscrapers, blending waterfront tranquility with the bustling glamour of a global metropolis. Bright neon lights glimmer along the bank, and gentle river breezes brush past the promenade, painting a picture of Shanghai's modern prosperity and timeless elegance.
via CGTN
#APEC 2024 : les point clés de la dernière journée du sommet
Le sommet de l'APEC s’achève par une ultime réunion dans la capitale du #Pérou. Une déclaration finale doit être adoptée à l'issue du sommet. Les détails avec notre envoyé spécial sur place, Igor Kourachenko.
RT en français • Osez questionner !
#APEC 2024 : les points clés de la deuxième journée du sommet
La deuxième journée du sommet de l’APEC a commencé au #Pérou. Plus de détails avec notre envoyé spécial Igor Kourachenko, qui est sur place.
RT en français • Osez questionner !
🌐APEC Ministers Commit to Trusted AI and Inclusive Digital Growth
APEC digital and AI ministers convened for the first time in Incheon, Republic of Korea, issuing a joint statement that redefines regional priorities for AI governance. The meeting underscored a united commitment to responsible digital transformation and the development of trusted AI systems aligned with economic and societal needs.
The ministers identified three focal points: accelerating AI innovation to solve socio-economic challenges, expanding equitable digital connectivity, and building a secure, transparent AI ecosystem. Korea’s initiative to launch a dedicated APEC AI program by the end of 2025 was met with strong support, positioning the region to lead on practical, multilateral AI governance.
#AIandLaw#APEC#AIRegulation#AsiaPacificAI
🎙 Foreign Minister Sergey Lavrov’s video address to the 9th international conference "Russia and China: Cooperation in a New Era" (May 30, 2024)
💬 I am delighted to welcome the organisers of and participants in the 9th international conference "Russia and China: Cooperation in a New Era".
Most recently, Russia's President Vladimir Putin paid a state visit to China, which definitely became the centerpiece of bilateral exchanges this year. <...>
🇷🇺🇨🇳 The bond of comprehensive partnership and strategic cooperation between Russia and China has grown unprecedentedly strong thanks to the personal efforts of both heads of state. The Beijing summit sealed the two countries’ firm commitment to further deepen and expand it. This commitment was documented in the two leaders’ joint final statement.
This year, Russia and China celebrate 75 years of diplomatic relations. We mark this significant anniversary with achieving a new quality of relations – today, Russia and China view each other as priority partners and invariably adhere to the principles of mutually respectful, equal and trustful cooperation. We support each other with regard to key issues affecting the respective fundamental interests.
<...>
Strategic coordination in the international arena remains a key component of the Russian-Chinese partnership amid the growing international tensions. Our foreign policy tandem, held together by a broad commonality of interests as well as coinciding or similar approaches to key issues on the present-day agenda, plays a major stabilising role in global affairs.
☝️ The two countries are strengthening cooperation on multilateral platforms, primarily the Unite Nations and the UN Security Council, as well as #BRICS, #SCO, #G20, and #APEC.
<...>
The Russian-Chinese strategic tandem is gaining status, and this opens up new horizons for us in terms of stronger sovereignty, economic growth, and prosperity of both countries.
Read in full