Регулярно требуется преобразовать какой-либо текст в максимально совместимый текст для 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
„G-Klasse“ — Komödie in russischer Sprache mit englischen Untertiteln🎞️
Dies ist Geschichte eines einfachen Fernfahrers🚐 namens Sanja, der davon träumt, genug Geld💸 für ein ruhiges Leben und die Zukunft seines Kindes zu verdienen. Er nimmt den Auftrag an, einen teuren Geländewagen zu überführen, ohne zu ahnen, dass das Auto in kriminelle Machenschaften verwickelt ist. Aus einem harmlosen Nebenjob wird eine Reiheabsurder Abenteuer, Polizeiverfolgungen👮🏻♂️ und moralischer Prüfungen, in denen Sanja zwischen Geld, Ehrlichkeit und Familie wählen muss.
📺Der Film verbindet Ironie und Drama und verwandelt eine Reise quer durch Russland in eine Metapher für die Suche nach sich selbst und nach den wahren Werten.
🍿Am 2. Dezember um 19:00 Uhr im Filmtheater im Russischen Haus
📲Anmeldung ist erforderlich.
#kino#komödie#untertiteln#abenteuer
Der beliebte Familienfilm „Der Zauberer der Smaragdenstadt. Der gelbe Ziegelsteinweg“ wird am 18. November um 19:00 Uhr in russischer Sprache mit englischen Untertiteln.📺🍿
🎞️ Ellie fährt mit ihren Eltern und dem treuen Hund Totoschka in einem Wohnmobil🚍 zu einem Wochenendausflug aufs Land. Die Eltern haben beschlossen, an diesem Wochenende auf digitale Geräte📱 zu verzichten, was Ellie gar nicht gefällt. Während eines hitzigen Streits bricht ein Sturm🌪️ los, und der Wohnwagen wird mit Ellie und Toto in ein magisches Land getragen. Um nach Hause zurückzukehren, muss sie den Großen und Mächtigen Oz in Smaragdenstadt finden, der hinter dem gelben Ziegelsteinweg lebt. Auf ihrer Reise begegnet sie drei neuen Freunden: dem Vogelscheuchen, dem Blechmann und dem feigen Löwen.🦁😍
✍🏻Anmeldung ist erforderlich.
#kino#film#filmabend#familienfilm#abenteuer#berlinevents
Der beliebte Familienfilm „Der Zauberer der Smaragdenstadt. Der gelbe Ziegelsteinweg“ wird am 18. November um 19:00 Uhr in russischer Sprache mit englischen Untertiteln.📺🍿
🎞️ Ellie fährt mit ihren Eltern und dem treuen Hund Totoschka in einem Wohnmobil🚍 zu einem Wochenendausflug aufs Land. Die Eltern haben beschlossen, an diesem Wochenende auf digitale Geräte📱 zu verzichten, was Ellie gar nicht gefällt. Während eines hitzigen Streits bricht ein Sturm🌪️ los, und der Wohnwagen wird mit Ellie und Toto in ein magisches Land getragen. Um nach Hause zurückzukehren, muss sie den Großen und Mächtigen Oz in Smaragdenstadt finden, der hinter dem gelben Ziegelsteinweg lebt. Auf ihrer Reise begegnet sie drei neuen Freunden: dem Vogelscheuchen, dem Blechmann und dem feigen Löwen.🦁😍
✍🏻Anmeldung ist erforderlich.
#kino#film#filmabend#familienfilm#abenteuer#berlinevents
🎞️Die Fortsetzung der beliebten Zeichentrickserie über die Abenteuer von Ivan und seinen Freunden in einem weit entfernten Königreich🏰:
In einem perfekten Märchen zu leben, kann schnell langweilig werden.🥱
Also begannen Ivan und Vasilisa vom Reisen zu träumen💭
Nun Träumen kann manchmal gefährlich sein, und eines Tages änderte ein Schmetterling🦋das Leben von Ivan völlig:
auf einmal hat jeder im Königreich Ivan einfach vergessen😧 und selbst seine Geliebte Vasilisa konnte sich an ihn nicht erinnern!😳
Zusammen mit dem grauen Wolf🐺muss Vanja etwas unternehmen, um dieses Märchenuniversum auf den Kopf zu stellen und das Herz der schönen Vasilisa wieder zu erobern!❤️🏆
📽️„Iwan Zarewitsch und der graue Wolf 5" —ist eine faszinierende Geschichte über den Schmetterlingseffekt und Heroismus🦸🏻♂️
🗓️Am 8. Oktober um 19:00
📺 In russischer Sprache mit englischen Untertiteln
🎟️ Eintritt frei
#familienfilm#zeichentrickfilm#ivanundvasilisa#russischesmärchen#abenteuer#gratisevent#kinoberlin
"Jeder träumt davon, einen Hund zu haben" - ist ein Abenteuerfilm über wahre Freundschaft, der auf der Geschichte von Vladimir Zheleznikov basiert.✍🏻🐶
Moskau in den 1960er Jahren.
Der 12-jährige Fünftklässler Jurka, der seinen Vater verloren hat, findet neue Freunde - die Kinder eines berühmten Testpiloten👨🏻✈️,
die genauso verträumt wie Jurka sind.🧒🏻✨
Dank dieser Freundschaft ist der Junge nicht mehr so einsam😔und von nun an lernen drei Freunde, alle Schwierigkeiten und Überraschungen des Erwachsenenlebens gemeinsam zu überwinden.🫂
🗓️ Perfekt für einen Familienausflug: kommt am 19. September um 19:00ins Filmtheater im Russischen Haus und genießt einen wundervollen Abend zusammen mit den kleinen Protagonisten des Filmes von Olga Beljaewa.😍
🎬Die Filmaufführung wird in russscher Sprache mit englischen Untertiteln stattfinden.
👧🏼 6+
🎟️ Eintritt frei
#gratiseventberlin#familienfilm#russischeskino#abenteuer#filmtheater#russischeshausberlin#familienausflug#kinofürkinder#freundschaft
🎉🌄 Man kann den Kaukasus verlassen, aber die kaukasischen Wurzeln bleiben für immer! 🌟👫 Die Verwandten eines jungen Osseten haben beschlossen, die alte Tradition zu bewahren und seine Braut aus St. Petersburg in ihr kaukasisches Dorf zu bringen. Doch oh nein! 😱 Die "gestohlene" Braut ist nicht die richtige, und jetzt steht die Hochzeit auf der Kippe… 💍🚨
📅🎟️ Kommt am 5. September um 19:00 Uhr ins Filmtheater im Russischen Haus für die einzigartige Komödie in russischer Sprache "How I Met Her Mother" mit englischen Untertiteln. 🕖🍿
👥👨👩👧👦 12+ 🎫 Eintritt frei!
#Kaukasus#Hochzeit#Komödie#Filmabend#RussischesHaus#BergeUndAction#Tradition#Abenteuer#FreierEintritt#SpannungPur