Регулярно требуется преобразовать какой-либо текст в максимально совместимый текст для 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
👋Приветствую! Начнём день с прекрасного?
Хрен тебе, а не красивое видео.
В доме должна быть одна звезда, и это не ты.
Спорим, видео со мной наберёт больше просмотром, чем с тобой?
Ну я пошёл...
Tough luck, you're not getting a beautiful video.
There should only be one star in this house, and it's not you.
Bet my video gets more views than yours?
Well, I'm off...
• На переднем плане (чего? of what? + Genit.) видео/фото/картины
[na pi-red-nim pla-ne]
In the foreground(of the video/photo/painting)
• На заднем плане
[na zad-nem pla-ne]
In the background(of)
#LearnRussian
#useful_vocabulary
😎 Stay with @learnRCRussian
The "I'm Not Russian, but..." trend is still blowing up on TikTok.
🔻Foreigners keep making vids to Russian songs, trying to sing along to bangers.
🎤🎵How do you like it?
#news
#learnRussian
😎RCR | Support | Boost
Alaskans have an interest in Russian culture and language.
🔻The state celebrates Maslenitsa, Easter, and other holidays common in Russia.
🔻Irina, an employee of the state's tourism industry, told RT about this.
🔻According to her, many want to study Russian and for their children to study it, but it is not taught in local schools.
Source: rt_russian
📎 Somebody, give them my phone number, please!
#learnRussian
#news
😎RCR | Support | Boost
The "I'm Not Russian, but..." trend is still blowing up on TikTok.
🔻Foreigners are making vids to Russian songs, trying to sing along to bangers, especially from Miyagi & Эндшпиль.
🎤🎵The results are on video!
#news
#learnRussian
😎RCR | Support | Boost
NATO Secretary-General Mark Rutte has warned EU countries that they will have to learn how to speak Russian in 4-5 years if they do not significantly increase the amount of money that they spend on defense, which currently stands at 2% of GDP. He said this in his speech to the European Parliament in Brussels.
"If we do not do this, we will have to start studying Russian in 4-5 years or go to New Zealand," he said.
📎Not that I'm driving at anything but stay with @learnRCRussian and learn some Russian for free with us!😉
Source: TASS
Picture: AIшедеврум
#news
#learnRussian
😎 Subscribe to https://t.me/learnRCRussian
• Секир башка! ⚔️
[si-kir bash-ka]
🔻From Turkic: literally to cut head off- means inevitable punishment (often humorous).
🔻Башка is a pretty rude variant of голова (a head).
Example:
- Ой, я случайно опубликовал твоё видео на You tube!
- Oops, I accidentally posted your video on YouTube!
- Секир башка тебе!
- Секир башка to you! 💀
#spoken_Russian
#LearnRussian
🟠RCR | Support | Boost
Это могли быть мы, но ты занят(а) своим русским.
It could be us but you are busy with studying your Russian.
#just_a_joke
#learnrussian
😎RCR | Support | Boost
Это могли быть мы, но ты занят(а) своим русским.
It could be us but you are busy with studying your Russian.
😴Доброй ночи, товарищи!
#just_a_joke
#learnrussian
😎RCRussian | Support | Boost
Реалистический 🆚️ Реалистичный 🆚️ Реальный
🔢Реалистический
[ri-a-lis-ti-chis-kiy]
Realistic
🔻This adjective describes something following the principles of realism:
• Реалистическая картина
[ri-a-lis-ti-chis-ka-ya kar-ti-na]
А painting following the principles of realism
🔢Реалистичный
[ri-a-lis-tich-nyj]
Realistic
🔻It means practical or true to life:
• Реалистичный план
[ri-a-lis-tich-nyj plan]
A practical and achievable plan
🔢Реальный
[ri-al'-nyj]
Real
🔻It simply means real or existing:
• Реальная проблема
[ri-al'-na-ya prab-le-ma]
Аn actual, existing problem
🎧🗣👇
#tricky_words
#learnRussian
😎 Stay with @learnRCRussian
🔻Russian has nuances that are only understandable to native speakers or advanced language learners. A kind of secret code:). The meaning of a sentence can even depend on intonation.
🔻The words in these sentences might seem identical, but the meaning is completely different!
1.Не надо меня уговаривать.
[ni na-da mi-nya u-ga-va-ri-vat']
I don't agree, and persuasion won't work.
2. Меня не надо уговаривать.
[mi-nya ni na-da u-ga-va-ri-vat']
No need to persuade me, I agree.
😎С пятницей, товарищи!
#tricky_words
#learnRussian
😎RCRussian | Support | Boost
• Заначка (заначки) (femjn.noun)
[za-nach-ka (za-nach-ki)]
🔻It's more than just savings – it's a secret stash for a rainy day, your personal hidden reserve.
🔻The word comes from the colloquial verb:
• Заначить (perf.)
[za-na-chit']
To hide, to stash away
🔻In the past, people hid money in boots, under floorboards, or in books. Today, the hiding spots are just as creative (and unpredictable!).
So, where would your cat hide its заначка?
#useful_vocabulary
#spoken_Russian
#LearnRussian
😎RCR | Support | Boost
🎃 Russia's Ancient "Halloween"
🔻While the world celebrates Halloween on October 31st, Slavic pagans once marked ▶️Велесова Ночь (Veles Night) – the night when the veil between the world of the living and the world of the dead was believed to be the thinnest.
🔻However, there is a modern, folk-humorous name for Halloween in Russia. It was coined by analogy with the traditional Orthodox holidays like Яблочный Спас (Apple Spas). It perfectly captures the Russian tendency to adapt a foreign holiday with a familiar, often agricultural, name:
• Тыквенный Спас
[ty-kvin-nyj spas]
Pumpkin Spas (Saviour)
🔻So, if you find yourself in Russia tonight instead of celebrating Halloween, be sure to celebrate Тыквенный спас! (Especially since there have been discussions about potentially banning Halloween officially due to its satanic atmosphere).
🔻ТыквенныйСпас is considered to be about cooking pumpkin dishes, home decorations, pumpkin games and festive gatherings. This wholesome family holiday offers a Russian alternative to Western Halloween!
🎃Enjoy your pumpkins the Russian way! Happy holiday!Всех обняла!
#Russian_culture
#holidays
#LearnRussian
😎RCR | Support | Boost