Регулярно требуется преобразовать какой-либо текст в максимально совместимый текст для 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
🏠 Ofertas de primavera de Dreame
#dreame
✅ Oferta: descuentos de hasta 380 euros
El comienzo de la Primavera está a la vuelta de la esquina, y desde Dreame quieren que aprovechemos para renovar alguno de nuestros electrodomésticos. Entre robots aspiradores y aspiradores, además de moldeadores de cabello, entre otras cosas, podemos encontrar un abanico realmente amplio en su catálogo. Y lo mejor de todo es que ahora mismo podemos encontrar varios de estos dispositivos en oferta.
Por poner un ejemplo, tenemos un gran descuento en el DREAME L10s Ultra Gen 3 Kit, un robot aspirador y friegasuelos con una potencia de succión de 25.000Pa, que además está repleto de funciones para tener la mejor limpieza autónoma en casa. En el caso de preferir una aspiradora sin cables, la DREAME H15 PRO es otro de los productos en oferta, cuya principal ventaja es que permite incluso aspirar residuos húmedos. Y finalmente, para temas de belleza tenemos opciones como el DREAME AirStule Pro, un moldeador 7 en 1 capaz de secar, dar volumen al cabello y mucho más.
➡️ Rebajas de Primaverahttps://is.gd/iDns0W
➡️DREAME L10s Ultra Gen 3 Kithttps://tinyurl.com/3vjah6ap
➡️DREAME H15 PROhttps://tinyurl.com/bdd5u2ht
➡️DREAME AirStule Prohttps://tinyurl.com/88fy8mu8
📣 Síguenos: @compradiccion
📱Síguenos en TikTok: https://www.tiktok.com/@compradiccion
🌎compradiccion.com
ℹ️ Ofrecido por Dreame
Интересную маркетинговую стратегию выбрал китайский производитель пылесосов Dreame. Преуспев с бытовой техникой, компания решила делать автомобили.
Сейчас в Китае столько произодителей авто, что выделиться сложно. Чтобы не потеряться, Dreame начала копировать дизайн люксовых машин. Сначала Bugatti и Rolls Royce, теперь еще и Bentley.
Это все немного странно, но нельзя отрицать, что о компании заговорили. Ни одного автомобиля еще по факту нет, только концепты, а она уже считается автопроизводителем.
Это ерунда — 👎
Но в этом что-то есть — 🤝
#dreame
КИТАЙСКАЯ ПРЕМИУМ ТЫКВА
Хотел бы поделиться свои опытом недолгого обладания китайским чудом техники и предостеречь вас от проблем, о которых вы, возможно, даже не подозревали. Речь пойдёт о пылесосе фирмы Dreame, который некоторые блогеры на полном серьёзе сравнивают с Dyson как что-то примерно одинаковое. 😂
В рекламе Дайсона меня упрекнуть не получится, потому что пылесосы этой фирмы давно не продаются в РФ официально, соответственно, и платить мне за их рекламу некому. Поэтому буду называть этот бренд открыто. Так вот, проводной пылесос Dyson служит мне верой и правдой уже лет 10 или даже 15, в нём за это время не сломалось вообще НИЧЕГО.
В прошлом году настало время купить беспроводной пылесос, но Дайсона по известным причинам в РФ официально больше нет. Я забрёл в "премиальный" брендовый салон пылесосов Dreame на Новой Риге и был удивлён ассортиментом и видом товаров. Выглядели они не хуже, а то и лучше Dyson. Я решил, что раз Dreame продаётся в РФ официально, то никаких проблем с запчастями не будет. Ну а покупка в брендовом салоне в 1.5 раза дороже, чем в других местах, поможет мне решить любые проблемы, если они возникнут.
Проблемы начались почти сразу. Где-то на 10-15 установку пылесоса на док-станцию, она перестала засасывать пыль в мешок. Чтобы функция заработала снова, приходилось вынимать вилку из розетки и засовывать обратно (видимо, чтобы заклинившие китайские "мозги" пылесоса перезагрузились).
Я отвёз пылесос в фирменный бутик, где его диагностировали почти 40 дней, как покойника, после чего заявили, что он полностью исправен. Естественно, он как был неисправен, так и остался. Поскольку недостаток не самый критичный, я просто плюнул на это и не стал с ними спорить
Дальше перестала работать подсветка пыли на насадке. Сначала при повороте насадки направо, потом совсем перестала работать, а потом и вовсе насадка развалилась на две части. В фирменном магазине меня обрадовали, что гарантия на этот китайский чудо-пылесос 1 год, а у меня прошёл 1 год и 1 месяц, соответственно, я могу идти с ним в пешее эротическое. Никакие мои проблемы они решать не будут, даже несмотря на то, что я купил это чудо-юдо в их фирменном салоне в 1.5 раза дороже (со всеми остальными брендами это избавляло меня от любых проблем, но не с Dreame).
При этом данной насадки у них нет в наличии даже за деньги!!! Единственное, чем они могут мне помочь, это дать ссылку на сайт, где можно заказать такую насадку со сроком доставки... 3 месяца!!! И это при том, что на новейший Dyson, который только вышел в прошлом году и вообще не продаётся в РФ официально, насадки продаются на Авито в огромном количестве в наличии!!!
В общем, придётся отправить этот пылесос туда же, куда и пыль с него - на помойку. Нанимать юриста для суда по пылесосу нецелесообразно дорого, а в проект "Социальный Ярдрей" меня не возьмут. 😂😂😂 Ну а вам мой опыт бесплатно, пользуйтесь - не всегда китайския красивая обёртка соответсвует содержанию.
@dreame_ru#dreame
Top Tech Announcements from CES 2025
🔍CES 2025 Highlights:
1. Roborock & Dreame: New vacuum robots with robotic arms, lifting items up to 500g.
2. Lenovo: Introduced ThinkBook Plus Gen 6 with expandable OLED display, from 14 to 16.7 inches.
3. Nvidia: Launched RTX 50 series, featuring DLSS 4 for significant performance boosts.
4. SwitchBot: Unveils modular robot K20 Plus Pro, combines various home tasks.
5. Razer: Debuted Project Ava, a real-time gaming assistant chat-bot.
6. Dell: Introduced a 32-inch QD-OLED monitor that adapts sound to user's head position.
7. TCL: Showcases Ai Me, a companion robot with interactive features.
8. Based Hardware: Reveals Omi, a wearable device with a neuro-helper powered by GPT-4.
9. Withings: Presents the Omnia smart mirror, integrating health data from wearables.
10. Halliday: Launches smart glasses with real-time translation capabilities.
#CES2025#TechAnnouncements#Robots#AI#Nvidia#Gaming#Wearables#SmartHome#Lenovo#Roborock#Dreame#Razer#Dell#TCL#SmartGlasses#HealthTech#Innovations#Gadgets#VR#ComputerHardware#VC