Регулярно требуется преобразовать какой-либо текст в максимально совместимый текст для 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
Ya los exhibieron por mentirosos 🤥
🔴 Tras la resolución del #INE, Álvarez Máynez siguió defendiendo el spot de #MC (@MovCiudadanoMX) asegurando que todo es verdad 🍊🙄‼️
https://sinlineamx.com/ine-ordena-retirar-spot-movimiento-ciudadano-contra-morena/
¡No aprende! 🙄
🔴 El #INE concluyó que el contenido del spot de #Morena no incurre en calumnia contra #SalinasPliego, pues no presenta información falsa 📺✅
https://sinlineamx.com/ine-rechaza-segunda-vez-retirar-spot-morena/
¿No que el #INE no se toca? 🤡
🔴 Ahora resulta que los amigos de #AcostaNaranjo se quejan por acatar las leyes electorales que tanto defendían 😬 | ¿Cómo ven? 🗳️🙄👇
🇲🇽 Мексика готовится к масштабным выборам 1 июня 2025 года 🗳️
В это воскресенье жители Мексики отправятся на избирательные участки, чтобы сделать свой выбор на важнейших выборах года. В повестке дня:
🔹Выборы судей
🔹Местные выборы в штатах Дуранго, Веракрус и Пуэбла
Почему эти выборы важны?
- Первые прямые выборы судей меняют судебную систему.
- Локальные выборы влияют на борьбу с преступностью.
- Реформа может повлиять на экономику и отношения с США.
Национальный избирательный институт (INE) запустил специальную информационную кампанию, которая помогает гражданам быстро и удобно узнать, где находится их избирательный участок. Это стало частью усилий по укреплению прозрачности выборов и стимулированию гражданской активности.
Эти выборы имеют большое значение как для судебной системы, так и для регионального управления.
#Мексика#Выборы2025#INE#Политика#НовостиМира#Democracia#Elecciones2025
👉Всегда свежие новости о странах Латинской Америки
🇨🇱⚒️Чили: Промышленный рост в апреле 2025 года благодаря горнодобывающему сектору
В апреле 2025 года промышленное производство Чили увеличилось на 3,8% по сравнению с аналогичным периодом прошлого года, в основном за счёт роста горнодобывающей отрасли.
Горнодобывающий сектор продемонстрировал рост на 10,1%, при этом добыча металлических руд, включая медь, увеличилась на 12,1%, что стало основным фактором общего промышленного роста.
Сектор электроэнергии, газа и водоснабжения сократился на 1,0%, в основном из-за снижения производства электроэнергии на 1,4%.
Кроме того, Индекс экономической активности (Imacec) за апрель 2025 года вырос на 2,5% по сравнению с апрелем 2024 года, чему способствовали положительные результаты в горнодобывающем секторе и онлайн-торговле.
Ключевые цифры:
• Промышленное производство: +3,8%
• Горнодобывающий сектор: +10,1%
• Добыча металлических руд: +12,1%
• Электроэнергия, газ и водоснабжение: -1,0%
• Imacec: +2,5%
#Чили#Экономика2025#Горнодобыча#Промышленность#Медь#Imacec#INE#Статистика
👉Всегда свежие новости о странах Латинской Америки!