Регулярно требуется преобразовать какой-либо текст в максимально совместимый текст для 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
Всем привет, поскольку сейчас моя песня Russian Girl оказалась на новой волне своей популярности в связи с трендом #russiangirl, то мне важно рассказать вам о своей позиции…
Я давно уже являюсь сторонником осознанного подхода к потреблению и бережного отношения к планете. Многие знают мою активность в вопросе раздельного сбора вторсырья.
Поэтому для любителей тренда мне важно здесь сказать, что в кадре на мне экошуба из искусственного меха бренда Инга Керен. Она же ещё и арт-объект, поскольку создательница этих изделий пишет картины, и на внутренней стороне моей шубы мы видим изображения одной из них! Вот такой эксклюзив. А моя шапка — это винтаж, то есть вещь практически из бабушкиного сундука. Я приветствую именно такое бережное, заботливое отношение к красоте. Пусть красивым будет мир внутри и мир снаружи!
Буду рада видеть здесь не только тех, кто любит мои песни, но и также старается беречь нашу планету.
Жду встречи на своих ближайших концертах:
4.01.24 — Питер, клуб Джаггер
25.01.24 — Москва, клуб 16 тонн
P.S:
Muah — Оксана Севостьянова
А что вы знаете о песне Russian girl?
…я написала её в 2008 году в Санкт-Петербурге, записала в Париже в 2009 и выпустила в России в формате сингла в 2010, а позже, в 2011 года она вышла в качестве одной из песен альбома «C’est la vie». С 2008 по 2010 годы я жила во Франции и работала с известной французской группой «Nouvelle Vague»: участвовала и в записях, и в концертах. У нас было много гастролей – практически по всему миру. «Russian Girl» была записана с музыкантами «Nouvelle Vague» под руководством продюсера Марка Коллина на студии неподалеку от Монмартра вместе с другими треками моего первого сольного альбома «C’est la vie!». Я много времени проводила вместе с французскими коллегами и остро ощущала разницу наших менталитетов. Как-то я серьезно сейчас завернула, а ведь эту песню нельзя воспринимать без иронии! Да, я здесь пою на английском, но с нарочитым акцентом. Это такая шуточная игра и стёб на тему стереотипов. Песня стала моей визитной карточкой. Надо отдать должное этому треку – он облетел весь мир и сейчас снова оказался на очередной волне своей популярности! ❤️
Послушать композицию вживую вы можете на всех моих концертах!
P.S: Оксана Севостьянова — MUAH
#jenialubich#женялюбич#russiangirl#slavicgirl
Спасибо всем, кто был недавно на моем концерте в Москве в пространстве «Море музыки», что внутри океанариума на ВДНХ. Этим выступлением я отмечала свой день рождения. И самым главным подарком было то, что вы все пришлии нам всем удалось в буквальном смысле окунуться в море моей музыки. Я хочу поблагодарить каждого зрителя за ваши любовь и поддержку, ия благодарю сотрудников площадки и свою команду, своих музыкантов и тех, кто помогает мне в моем проекте за ваши доверие, творческий подход ко всему и готовность быть со мной на одной волне.
Павел Илюшин — гитара
Дмитрий Турьев — бас
Рома Николаев — барабаны
Алексей Худницкий — звук
Марьям Мурадова — фото
Настя Гоголь — видео
Tory Zak — мой пиджак
By Chris — платье
Елена Полубояринова — MUAH для меня
#Веснавмоихснах
#Ритуальная
#Деньрождения
#Случайныйповорот
#Russiangirl
#Весна
Следующее выступление у нас будет в уютном пространстве джаз-клуба Игоря Бутмана в Москве 26.04.24.
В Петербурге вы услышите программу «Весна в моих снах» 23 мая на Новой Сцене Александринского театра…Все билеты, приобретённые на 23 марта — действительны.
В Татьянин день поздравила именинниц, студентов и всех пришедших со сцены клуба «16 тонн». Пожалуй, это был один из самых бодрых концертов за последнее время! Мне даже вспомнился клуб «Артефак»… А все почему? Потому что танцевальные ритмы, которые заставляют пуститься в пляс, улыбнуться друг другу, порадоваться моменту «здесь и сейчас», помогают настроиться на что-то хорошее. А мне кажется, мы вообще живём в такое время, когда нам всем очень важно настроится на что-то хорошее. Чего и желаю! Здесь несколько фрагментов нашего выступления! Спасибо большое, что пришли! И я благодарю свою команду за то, что вы со мной:
Павел Илюшин — гитара
Дмитрий Турьев — бас,
Рома Николаев — барабаны
Алексей Худницкий — звук
Елена Полубояринова — MUAH для меня
#потанцуйсомной
#метелица
#russiangirl
#рок
#футболка
#сессия
Теперь увидимся весной! 23.03.24, Петербург, Новая сцена Александринки. Подробности сообщу на днях.
Москва, спасибо за концерт! Я была очень рада поделиться с вами своими песнями и джазовыми стандартами, которые максимально созвучны джаз-клубу Игоря Бутмана в Москве, где мы, кстати, выступали впервые! Я получила огромное удовольствие и от возможности исполнить что-то из своего около-джазового и неизданного авторского материала, и от встречи с вами, и я с радостью здесь оставлю на память видео-фрагменты с концерта. Предлагаю немного замедлиться и почувствовать, как это было…❤️
Петербург, встретимся с вами 23 мая на Новой сцене Александринского театра!
#Iwannabelovedbyyou
#Весна
#Summertime
#Колыбельнаятишины
#Часы
#Russiangirl
P.S:
Special thanx моей команде:
Павел Илюшин — гитара
Денис Кириллов — клавиши
Дмитрий Турьев — бас
Рома Николаев — барабаны
Алексей Худницкий — звук
📹 — Настя Гоголь
👗 — Lets Go Dress
💄 — Елена Полубояринова
Подписаться l Концерты l Слушать
23 июня я выступала в Усть-Лабинске на фестивале «Александровская крепость». Это было феерично! Многие приехали из близлежащих краев специально, чтобы меня послушать и даже спеть вместе со мной. Меня удивило, что люди знали слова практически всех песен из сет-листа. Как же здорово встречать в такой далекой стороне свою аудиторию! Одновременно здесь было много людей, которые слышали и видели меня впервые! Я почувствовала вашу любовь! Звук, свет, настрой - все это было на уровне столичных фестивалей! Респект организаторам и моей команде:
Павел Илюшин - гитара
Дмитрий Турьев - бас
Рома Николаев - барабаны
Денис Кот - звук
#Лето
#Колыбельнаятишины
#Часы
#Беззатейно
#Футболка
#Russiangirl
Подписаться l Концерты l Слушать
Спасибо всем, кто был на нашем концерте на крыше дизайн-завода в Москве 6.06! Я почувствовала от вас такое тепло… Прямо пела и наслаждалась тем, что меня не просто слушают. Меня слышат! От этого такой драйв и такое настроение… Я буду рада комментариям от тех, кто там был - поделитесь впечатлениями. А я снова жду встречи! Следующий концерт в столице - 11.08.24, а в Питере я окажусь со своей музыкой вновь на крыше… — на крыше Roof Place! Буду делиться своим творчеством и ощущением полета!
Здесь размещаю видео-фрагменты 6.06.24 на память и для вдохновения! ❤️
#Напролет
#Часы
#Пушкин
#Твоимиглазами
#Случайныйповорот
#Russiangirl
Благодарю свою команду:
Павел Илюшин - гитара
Денис Кириллов - клавиши
Дмитрий Турьев - бас
Рома Николаев - барабаны
Денис Кот - звук
💄: Елена Полубояринова
15 августа — Петербург, ROOF PLACE.
Подписаться l Концерты l Слушать
Я мечтала об этом концерте на Новой сцене Александринского театра давно, и вот, наконец, всё сложилось! Пожалуй, это выступление за все время существования моего проекта было одним из лучших! Казалось бы, мечта сбылась, дело сделано, и теперь можно было бы успокоиться… Но я хочу ещё! И я уверена, что мы что-то очень красивое ещё здесь сыграем и представим! И я уже жду момента, когда я вновь буду стоять на Новой сцене и делиться с вами самым сокровенным через свою музыку, свои песни! А сейчас несколько фрагментов на память и для вдохновения…
#Веснавмоихснах
#40метров
#Вбелыхоблаках
#Портрет
#Myheart’inthehighlands
#Бродский
#Песнядевушки
#Часы
#Колыбельнаятишины
#Russiangirl
Благодарю свою команду:
Станислава Малаховская — кельтская арфа
Павел Илюшин — гитара
Денис Кириллов — клавиши
Дмитрий Турьев — бас
Рома Николаев — барабаны
P.S:
👗: George Shaghashvili
💄: Юлия Павленко
Следующий концерт в Петербурге состоится уже 15 августа на крыше ROOF PLACE.
Подписаться l Концерты l Слушать