Регулярно требуется преобразовать какой-либо текст в максимально совместимый текст для 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
А вот и выпуск новостей “Hot Box” на телеканале “Music Box Gold”, посвящённый творческим тайнам JONY 🔥🎶
До встречи в прямом эфире!🥰❤️
#MUSICBOX#musicboxgold#тв#TV#телеведущая#TVpresenter#музыкальныеновости#светланатурилова#jony
А вот и выпуск горячих новостей “Hot Box” на телеканале “Music Box Gold”, посвященный музыкальному творчеству Сергея Жукова🎶🔥
Время ротации в течении недели и ежедневно в 04:00, 10:00, 16:00, 22:00
До встречи в прямом эфире!🥰❤️
#MUSICBOX#musicboxgold#тв#TV#телеведущая#TVpresenter#музыкальныеновости#светланатурилова#сергейжуков
Подоспел горячий выпуск новостей “Hot Box” на телеканале “Music Box Gold”🔥💃🎶
Смотрите эфиры со мной ежедневно и всю неделю на телеканале “Music Box Gold”: в 03:00, в 09:00, в 15:00, в 21:00 по Мск.📽️⭐️
Рада знакомству во время съёмок в позитивным и харизматичным Антоном Наумовым солистом группы «Премьер Министр».🤗
До встречи в прямом эфире!🥰❤️
#MUSICBOX#musicboxgold#тв#TV#телеведущая#TVpresenter#антоннаумов#премьерминистр#светланатурилова
А вот выпуск новостей “Hot Box” на телеканале “Music Box Gold”🔥💃🎶
Смотрите эфиры со мной ежедневно и всю неделю на телеканале: в 03:00, 09:00, 15:00, 21:00 по Мск.📽️⭐️
До встречи в прямом эфире!🥰❤️
#MUSICBOX#musicboxgold#тв#TV#телеведущая#TVpresenter#московскийтеатрмарионеток#лягушкапутешесвенница#премьерминистр#светланатурилова
Подоспел горячий выпуск новостей “Hot Box” на телеканале “Music Box Gold”, посвящённый музыкальному творчеству JONY🔥🎶
Смотрите эфиры со мной ежедневно и всю неделю на телеканале: в 04:00, 10:00, 16:00, 22:00 по Мск.📽️⭐️
По традиции делюсь с Вами бэкстейджем со съемок.
До встречи в прямом эфире!🥰❤️
#MUSICBOX#musicboxgold#музыка#музыкальныеновости#music#тв#TV#телеведущая#TVpresenter#jony#светланатурилова
Подоспел горячий выпуск новостей о мире музыки и шоу-бизнеса “Hot Box” на телеканале “Music Box Gold”🔥💃🎶
Расписание выпусков всю неделю и ежедневно на телеканале “Music Box Gold”: в 02:00, 08:00, 14:00, 20:00.⭐️
Выпуск новостей посвящён Ольге Бузовой и ее творческим планам!🎥🔥
До встречи в прямом эфире!🥰
#MUSICBOX#musicboxgold#тв#телеведущая#TVpresenter#ольгабузова#светланатурилова#TVpresenter#television#presenter#TV#премьера
Ольга Бузова исполнит главную роль в комедийном фильме «Равиоли Оли», премьера которого запланирована на следующий год.🎬👏 Подробнее смотрите в новом выпуске новостей из мира музыки и шоу-бизнеса “Hot Box” на телеканале “Music Box Gold” 🤗🎶📽️🎶
#тв#ольгабузова#светланатурилова
#MUSICBOXGOLD#MUSICBOX#HOTBOX#телеведущая#телевидение#TVpresenter#кино#РавиолиОли#кинопремьера
Я тут и не заметила, как выпуски со мной пошли😂все обещала вам напомнить) Но меня проинформировали бывшие одногруппники
⠀
Итак, ребята 😎
⠀
Я в эфире с новостями из мира музыки и шоу-бизнеса
⠀
Мы продолжаем нашу рубрику Флэш Бокс на телеканале Рашн Мьюзик Бокс.
⠀
Смотрите выпуски с сегодняшнего дня и каждый день с повторами 4 раза в день:📺
03:00
09:00
15:00
21:00
⠀
#танязож_сми
#ведущаямузыка#ведущаямосква#мюзикбокс#mysicbox#музканал#музтв#мтв#рутв#каналю#MUSICBOXGOLD#MUSICBOX#HOTBOX#музыкальныеновости#musicnews
#телеведущая#телевидение#TVpresenter