Регулярно требуется преобразовать какой-либо текст в максимально совместимый текст для 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
🔥 ПРЕМЬЕРА!
Свежий выпуск PROавтора — у микрофона Кажэ Обойма!
🎙 Говорим о детстве в Петербурге, факультете журналистики и первых текстах.
🧠 Погружаемся в внутреннюю философию артиста и размышляем, зачем сегодня нужен рэп.
⚡ Вспоминаем первые выступления, осмысленные альбомы и тот самый момент, когда понял — назад дороги нет.
Это не интервью. Это разговор на равных.
🎧 СЛУШАЙ НА
Яндекс Музыка
iTunes
📺 СМОТРИ НА YouTube | Рутюб
🔗 ПОДПИШИСЬ НА ВК, чтобы быть в теме.
#PROавтора#MadJozef#КажэОбойма
Я бы сказал 95% успеха трюка зависит от подачи…
🪄Алексей Михайлов - иллюзионист и мастер своего дела ! В новом выпуске, на всех площадках PROавтора !
#proавтора#madjozef#москва#фокусымск
Видео podcasts
📱YouTube
📱РУТЮБ
📱Группа PROавтора ВК
📱Инста
Аудио podcasts
📱Яндекс музыка.
📱Apple Podcasts
«Система звука» vol.1
@true_spittah:
Сам знаешь как у нас жизнь течет!
Если не находить ни чего комедийного, ну… это вилы…
Новый выпуск на всех площадках и аудио подкастах.
https://t.me/systemazvuka
#proавтора
#madjozef
#системзвука
#труспита
🔥 Мы сняли акустическую лайф-версию «Моя Ева» 🔥
Совместный трек Mad Jozef и рок-группы «Ориентир» зазвучал по-новому.
Запись прошла в особой атмосфере — на берегу, у костра, где звучит только живая музыка и настоящие эмоции.
В кадре — Владимир Каменецкий (лидер группы) и Mad Jozef.
Песня «Моя Ева» уже несколько лет занимает лидирующие позиции в карточках артистов на музыкальных платформах.
А теперь скоро выйдет её новая интерпретация — акустическая лайф-версия.
🎶 Премьера впереди. Следите за новостями!
#PROавтора#MadJozef#Ориентир#МояЕва
На связи PROавtora.
Очень скоро — разговор, которого вы ждали.
Гость — настоящий голос улиц, ритм своего пути.
Угадай, кто? 👀
#PROавtora#MadJozef#НовыйВыпуск#СкороВЭфире
«Этот дом более не существует»…
Факты о блокадном Петербурге с Александром.
#proавтора#madjozef#подкаст#новыйвыпуск#proavtora
Слушать/Смотреть тут:
Видео podcasts
📱YouTube
📱РУТЮБ
📱Группа PROавтора ВК
📱Инста
Аудио podcasts
📱Яндекс музыка.
📱Apple Podcasts
Первый Rap до музыкальных релизов. «Система звука» Evil Glock 17#proавтора #madjozef#новыйвыпуск#подкаст#творчество#системазвука#evilglock17ВСЕ ВЫПУСКИ ЗДЕСЬ
https://vk.com/video-226881892_456239226?access_key=8663304645bb426b01
ЭКСКЛЮЗИВ! 🔥
Готовимся к самому жаркому выпуску сезона! 🎯
Кажэ Обойма в нашем подкасте! Расскажет всё как есть, без прикрас и фильтров. Поговорим с андеграундным рэпером о жизни, уличном флоу и том, как оставаться собой в мире музыки. 🎤
Что обсудим:
* Путь к успеху
* Творческие планы
* Секреты мотивации
* И многое другое! 🎯
Не пропустите!
👉 Подписывайтесь на канал, чтобы не пропустить релиз
👉 Делитесь с друзьями, которые любят честный разговор
#Подкаст#КажэОбойма#Рэп#Музыка#Интервью#proавтора#madJozef
🔔 Подписывайтесь на канал, чтобы первыми услышать новый выпуск!
🎁Розыгрыш от Кажэ Обоймы — внутри нового выпуска PROавтора!
У нас для тебя что-то особенное. Что именно?
🤫Секрет. Такой приз не купить — только выиграть.
Хочешь забрать свой трофей?
Вот что нужно сделать:
1️⃣Посмотри выпуск с Кажэ Обоймой
2️⃣ Сделай репост выпуска себе в VK
3️⃣ Напиши комментарий под видео
4️⃣ И поставь лайк
🎯 Победителя выберем 1 июля среди тех, кто выполнил все условия.
Не тормози — шанс один.
#PROавтора#MadJozef#КажэОбойма#розыгрыш#секретныйприз#OboymaStyle
🎙 Выпуск, который нельзя было не снять.
Он не гнался за светом. Он создавал звук. Биты, на которых выросли улицы. Хиты, за которыми стояли тени. Сцена 2000-х, Def Joint, гастроли, залы, энергия настоящего.
Мы поговорили о всём: о начале, о преданности, о боли, о творчестве… и о молчании. Он сказал то, чего никогда не говорил. И да — это был Меломан.
Выпуск готов.Скоро.Очень скоро.
#PROавtora#новыйвыпуск#madjozef#меломан#подкаст#историязвука
Система Звука.
Новый выпуск на всех площадках.
Вова «вот и все» о жизни в Голландии и своих корнях
Смотреть
#музыка#подкаст#вовавотивсё#труспита#системзвука#madjozef#proавтора