Регулярно требуется преобразовать какой-либо текст в максимально совместимый текст для 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
📼📼 ФИШКИ С ТИКТОКА ПОЛНЫЙ ТРЭШ?!😮
Сегодня dan-_- и Nayqo откладывают мышки и клавиатуры и смотрят ТикТок! Мы отобрали пачку лайфхаков, которые либо гениальны, либо заслуживают огромный Red Flag 🚩
Смотрим полный выпуск на наших каналах
👇
🎬YouTube |🖥VK
#R6S#GOGOVP
📼📼 ЭТИ МЕХАНИКИ В R6S НАСТОЛЬКО СЛОМАННЫЕ...
😱
p4sh4 и SkyZs оценивают различные фишки и механики от комьюнити зелёным или красным флагом 😈
Будут ли эти фишки чересчур имбовыми или же останутся неюзабельными? Узнай в полном ролике 👇
🎬YouTube |🖥VK
#R6S#GOGOVP
ТИРЛИСТ ОПЕРАТИВНИКОВ ДЛЯ РАНКЕДА🔥
Смотри ролик и узнай, кто безоговорочно попал в S, а для кого даже D — это слишком хорошая оценка 😎
Видео уже ждёт тебя на наших каналах 👇
🎬YouTube |🖥VK
#R6S#GOGOVP
🎞🎞 С БУТКЕМПА НОВОГО РОСТЕРА ПО R6S🔥🔥🔥
Приглашаем вас на обзор нашего буткемпа
😍 Знакомство с новичками Nayqo, RORICK, SkyZs и тренером Dxrk: как игроки коннектятся между собой и вливаются в ростер, планы на будущее и то, как прямо сейчас строится командная химия
🙌
Фулл ролик ждёт тебя тут ⬇️
🎬YouTube |🖥VK
#R6S#GOGOVP
Объявляем сборку лучших хайлайтов по R6S 🔥
Успей прислать свои самые крутые клипы до 26-го июля и попади на обзор к нашим Медведям: https://forms.gle/MccDdLiMyxPM2EKG9🤩
#R6S#GOGOVP
Обзор нового обновления от JoyStiCK🤩
🤯 Самый горящий раунд?
📁 Что посоветовал бы другу чтоб начать играть в радугу
🤔 Атака или защита? Что больше нравится Джойстику?
Смотри новый ролик на наших каналах и пиши в комментариях, что думаешь о новом патче ты?
🎬 YouTube |🖥VK
#R6S#GOGOVP
«Где логика?» с Медведями из R6S🧠
🏆Always — просто гений!
😦 Причём тут драконы, Ирландия и «Волшебник Изумрудного города»?
🌵 Лионелло Кактуселло!
Смотри новое видео на наших каналах и пиши в комментариях, сколько слов отгадал ты!
🎬YouTube | 🖥VK
#R6S#GOGOVP
JoyStiCK и dan-_- разобрали для вас базу настроек в Rainbow Six Siege 😏
❌ Какие настройки никогда не меняли Медведи;
🔊 Почему диалоги лучше выкручивать на максимум;
💡 Зачем оставлять обводку своих тиммейтов?
🖥 Какие параметры экрана выбрать для игры;
🔵 Почему синий – это лучший цвет для подсветки противников?
Смотри новое видео на наших каналах и играй с профессиональным комфортом 🤩
🎞YouTube | 📡VK
#R6S#GOGOVP
Always и dan-_- разобрали по полочкам лучших оперативников атаки в R6S 🔥
🤩 Самые метовые и главные имбы патча;
👌 Стартовая подборка для новичков;
❌ Кого никогда не пикнет dan-_-?
Чтобы точно не быть "нубом" в Rainbow Six Siege, быстрее смотри видео и учись играть у наших профессионалов 🤩
🎞YouTube | 📡VK
#R6S#GOGOVP
Теперь твои «фенрирки» никто не найдет 😉
dan-_-и JoyStiCK разобрали одного из лучших оперативников защиты — Fenrir: https://youtu.be/Qvkl_rFhz00
👆 Базовые споты для гаджета на Орегоне и Клубе;
👊 Стили игры на Fenrir;
📁 Эффективные комбинации.
Пиши в комментах, на каких картах ты бы ещё хотел увидеть правильную расстановку для гаджета Fenrir!
#R6S#GOGOVP
Долгожданный ролик с Always уже на YT-канале:
https://youtu.be/IsoVHz77JAA
Лучшие споты для камер Valkyrie от dan-_-и Always. В этом гайде узнаем:
💪 Как правильно прятать камеры;
🔥 Защитные и агрессивные споты;
📁 Базовые места на Орегоне, Консульстве, Небоскребе и Лабе.
Пиши в комментах, на каких картах ты бы ещё хотел увидеть секретные места для камер Valkyrie от Медведей!
#R6S#GOGOVP
🤩 После этого видео вы не сможете играть в R6S по-другому: https://youtu.be/4uXKHUDTVp4
В новом гайде на канале JoyStiCK и dan-_- рассказали и показали:
😡 Как играть агрессивно за защиту
🔸 Лучшие ранауты и спавнпики на картах «Шале» и «Кафе Достоевский»
💪 Как сломать стратегию противника на первых секундах игры
Смотри видео, запоминай точки и пробуй в следующей игре 🔥
#R6S#GOGOVP