Регулярно требуется преобразовать какой-либо текст в максимально совместимый текст для 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
BESTUNE T77 — самый доступный компактный кроссовер, экономия без потери качества!
Передний привод, 1,5 литровый двигатель на 160 лс, коробка-робот. Датчики дождя и света, задний парктроник и камеры 360, дублирование экрана дисплея на медиа-дисплее, дистанционный запуск, защита двигателя в стоке, фронтальные и боковые подушки безопасности. Панорамная крыша.
Дизайн топ — смотрите видео.
Цена — от 1,829 млн руб!
Автомобилей осталось немного, поторопитесь.
Подробности: +7 (495) 089-05-39
#bestune
Производство легковых FAW локализуют в России
Китайская #FAW организует в РФ выпуск своих легковых автомобилей #Bestune — моделей T90 (крупный кроссовер), B70 (седан) и T77 (среднеразмерный кроссовер). Об этом сообщает «Российская газета» со ссылкой на представительство бренда.
Где именно будут производить Bestune — не уточняется. В настоящее время все автомобили Bestune поставляются в Россию в готовом виде из Китая.
T77 прежнего образца уже покинул российский рынок, модель вернется в модернизированном виде.
В 2025 году в РФ продали 4845 автомобилей FAW Bestune, что соответствует уровню 2024-го.
Источник: news.drom.ru/FAW-101755.html
#RCINews
Марки Bestune, Dongfeng и Rox опровергли уход из России
Российские представительства #Bestune и #Dongfeng выступили с официальным заявлением на фоне распространившейся информации о возможном уходе с рынка.
В Bestune сообщили, что новости о прекращении работы являются ложными — компания продолжает деятельность в стране.
Dongfeng же реализует стратегию долгосрочного присутствия и уход из РФ не рассматривает.
В разговоре с Журналом "Авто.ру" информацию о вероятном прекращении продаж опровергли и в пресс-службе премиального бренда #Rox.
И Bestune, и Dongfeng, и Rox оказались в списке марок, которые, по мнению президента Национального автомобильного союза Антона Шапарина, могут покинуть российский рынок из-за убытков на фоне повышения утильсбора.
Перечень опубликовал ТГ-канал Shot. Помимо Bestune и Dongfeng, в него попали Kaiyi, BAIC, SWM, Jetta, Wey, Oting и VGV. Однако ни одна из этих марок об уходе из России не сообщала.
«Bestune продолжает свою деятельность на территории России в полном объёме, планирует дальше развиваться, расширять свою дилерскую сеть и предоставлять своим клиентам высокого качества продукты и сервис», — сообщили в пресс-службе бренда.
«Официальный импортер “Дунфэн Мотор Рус” реализует стратегию долгосрочного присутствия, включая развитие дилерской сети по легковым автомобилям, а также поставки и поддержку коммерческого транспорта, — говорится в заявлении представительства Dongfeng. — Компания продолжает работу по обеспечению клиентов сервисом и запасными частями, а также по расширению доступности автомобилей на российском рынке. Все обязательства перед владельцами и партнёрами выполняются в полном объёме».
Представитель Rox сообщил, что компания рассматривает российский рынок как один из стратегических и имеет планы по расширению присутствия в РФ. Продажи автомобилей Rox в январе выросли на 44%.
Источник: auto.ru/mag/article/marki-bestune-i-dongfeng-oprovergli-uhod-iz-rossii/
#RCINews