Регулярно требуется преобразовать какой-либо текст в максимально совместимый текст для 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
Кто отжигал вместе с нами на шоукейсе 22 февраля от Solid Bangerz ?
Если да, то очень за вас рады, если нет, то предлагаем заценить видео! Ночь в клубе FACTORY 3 была жаркой!
Хэдлайнерами выступили OZMA из северной столицы, PLAGO из Таллина и 2Whales из Вологды!
Участники движа SVDj , Hell G , Infernal и Interceptor сами тоже отожгли как надо!
L.Kid , Moryakow , DNA88
TSP , InSpector , Changed Daily , Brain Wave и Tesla продемонстрировали мастерство чётких сводок!
ONEDER и Beels были у микро всю ночь и не переставали удивлять всех своей горячей читкой!
Оба танцпола были прокачаны по-максимуму! Яркие преимущественно кислотные и синие спецэффекты отлично дополнили драйвовую атмосферу рейва!
Спасибо большое за тусу, солидные, это было мощно, до встречи ещё в той же локации! Да-да, по секрету скажем, что 26 апреля намечается ещё одна туса в Севкабеле, ждём инфы!
#speaktobash#Solid_Bangerz#factory3#рейв
😈 Ола, Бэнгеры!
Сегодня у нас праздник русского днб мира, да и всей культуры ломанного ритма, с чем мы спешим вас поздравить и подарить 50 билетов на наше мероприятие, не жди удачу, хватай её за хвост!
Условия просты:
- любить Drum&Bass так же сильно как мы
- Подпишись на наш канал, канал Speak to Bash и жмякай кнопку участвую
Итоги розыгрыша будут подведены в 21:00 по Мск
С любовью к ритму и вам, Solid Bangerz!
#Solid_Bangerz#speaktobash#SPb_DNB#DNB#Drum_and_Bass#Lottery
Solid Bangerz: The Showcase в клубе FACTORY 3.
Прошло чуть больше месяца и нам не терпится посмотреть кадры, возвращающие в ночь 22 февраля и вновь ощутить ту незабываемую атмосферу! А освежить воспоминания нам поможет Aftermovie, снятый ребятами из команды Speak to Bash.
В эту ночь мы зажгли по-настоящему: два танцпола, топовые хэдлайнеры, отличный звук и аккуратно, но эффектно отстроенный свет! Мы нескончаемо рады, что вы разделили с нами наш первый большой опыт. Мы выложились по максимуму, чтобы зарядить вас энергией драм-энд-бейса и подарить океан эмоций.
Приглашаем всех на следующую вечеринку Solid Bangerz, которая состоится 26 апреля в клубе FACTORY 3. В этот раз будет еще жарче: лайнап пушка, артисты заряжены на полный разнос и уничтожение. Готовьте лапки, кроссовки и запас энергии! Следите за информацией в нашем TG канале и VK сообществе.
💬 Оставляйте в комментариях ваши топ-воспоминания 🚀
#Solid_Bangerz#SpeakToBash#Aftermovie#FactoryClub#DNB#SPb_DNB#Drum_and_Bass
😈 22.02.2025 - SOLID BANGERZ: The Showcase @ FACTORY 3
📌 г. Санкт-Петербург, Кожевенная линия, 40Д, клуб "FACTORY 3"
🎟 Билеты по ссылке
🎟 Следующее повышение цен 10.02.2025
‼️ Для комфорта гостей на вечеринке количество билетов строго ограничено
‼️ FC / DC / 18+
С любовью к ритму и вам, Solid Bangerz!
#Solid_Bangerz#Plago#Ozma#2Whales#Oneder#SpeakToBash#DimaBash#FactoryClub#DNB#SPb_DNB#Drum_and_Bass
Вчера сходил снимать первую вечеринку из, надеюсь, уже постоянной серии Atmosfear.
Всё это происходило в клубе Paradise — интересном и самобытном месте со своей атмосферой.
Для такого старта локация подошла хорошо.
На танцполе людей было не так много, но это ведь только начало.
У любой новой истории должен быть первый шаг.
По музыке и по настроению всё выглядело как попытка собрать в одной точке разные стороны Drum and Bass —
девять музыкантов, девять подач, девять состояний внутри одной ночи.
Я был там с камерой, снимал всё это движение, свет и людей.
И вот немного атмосферы вчерашней ночи.
А полный отчёт ищите у организаторов.
#speaktobash#димабаш#atmosfear#paradise#drumandbass#рейв#андеграунд#фотоотчет#санктпетербург#bashphoto