Регулярно требуется преобразовать какой-либо текст в максимально совместимый текст для 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
👷♀️KNAUF MP-75 mashina yordamida surtiladigan suvoq boʻlib, u xona ichidagi devor va shiftlarni suvash uchun ajoyib yechim hisoblanadi. Sarfi kam.
PFTG4 suvoq mashinasi bilan juftlikda, u suvash jarayonini qoʻl mehnati bilan solishtirganda bir necha karra tezlashtiradi.👍
Bitta sepma 50 mm atrofidagi suvoq qatlamini oldindan yuzani namlamasdan surtish imkonini beradi va hatto qalin qatlamda ham yorilmaydi.
Qorishma qattiq asosga (gʻishtli terim, sement suvoq, beton va boshqalar) surtiladi.👌
KNAUF MP-75 suvogʻini normal namlikdagi xonalarni, KNAUF-Flexendixt gidroizolyatsiyasi bilan birga qoplagan holda, oshxona va hammom devorlarini pardozlash uchun ishlatish mumkin.☝️
Sifatli materiallardan foydalaning.
KNAUFdan foydalaning.
- - - - -
👷♀️КНАУФ МП-75 штукатурка машинного нанесения является отличным решением для отделки стен и потолков внутри помещений. Обладает низким расходом.
Работая в тандеме со штукатурной машиной PFTG4, в разы ускоряет процесс оштукатуривания в сравнении с ручным нанесением.👍
Один намет позволяет нанести до 50 мм штукатурного слоя без предварительного обрызга, и не трескается даже при толстом слое.
Раствор наносится на твердые основания (кирпичная кладка, цементная штукатурка, бетон и т.п.).👌
Штукатурку КНАУФ МП-75 можно использовать для отделки помещений с нормальной влажностью, а также в кухнях и ванных комнатах с покрытием гидроизоляцией КНАУФ-Флэхендихт.☝️
Используйте качественные материалы.
Используйте КНАУФ.
#knaufuzbekistan#pft
👷♀️Agar obyektda katta hajmdagi suvash ishlarini bajarishingiz zarur, ammo vaqtingiz juda kam boʻlsa, PFT-G4 qurilmasidan foydalaning.
Bu tez va oson.
💪Mana, 50 yildan buyon afsonaviy KNAUF PFT G4 suvash mashinasi suvoqni sifatli va tez surtish borasida mutlaq yetakchilikni hech kimga bermay kelmoqda.
Foydalanish osonligi, shuningdek ish jarayonini qoʻl mehnatiga nisbatan uch karra tezlashtirish sifatga putur yetkazmay pardozlash ishlarini sezilarli jadallashtirish imkonini beradi.👌
Maqsadimiz – mukammallikka intilish!
- - - - -
👷♀️Если вам нужно выполнить большой объем штукатурных работ на объекте, а времени очень мало, используйте PFT-G4.
Это быстро и просто.
💪Вот уже целых 50 лет легендарная штукатурная машина КНАУФ PFT G4 является неоспоримым лидером машинного нанесения штукатурки по качеству и скорости.
Легкость эксплуатации, а также троекратное ускорение рабочего процесса в сравнении с ручным трудом, позволяет значительно повысить темпы отделки без ущерба качеству.👌
Наша цель - стремление к совершенству!
#knaufuzbekistan#pft#mp75
👷♂️Joriy yilning 1-iyunidan boshlab bizda KNAUF-MP 75 uchun yangi qoplar tayyorlanayotganini maʼlum qilamiz. Qoplar ekologik jihatdan toza, kraft qogʻozdan ishlab chiqarilgan. Qop dizayni oʻzgarmagan. Qalbaki mahsulotlarni xarid qilmang.
☝️KNAUF-MP 75 universal gips suvoq boʻlib, bino ichida devor va shiftlarni PFT G5 va PFT G4 kabi maxsus jihozlar yordamida suvash ishlariga moʻljallangan.
- - - -
👷♂️Спешим вас проинформировать, что c 1.06.2021 у нас новые мешки для КНАУФ-МП 75. Экологичные, из крафт-бумаги. Дизайн мешка остался прежним. Не покупайте подделки.
☝️КНАУФ-MП 75 универсальная штукатурка гипсовая, предназначенная для оштукатуривания стен и потолков внутри помещений машинным способом с помощью штукатурных машин, таких как PFT G5 и PFT G4.
Сайт| Facebook|Instagram
#knaufuzbekistan#mp75
#pft
💪KNAUF PFT - suvoq mashinalari va qorishma nasoslari ishlab chiqarishda shubhasiz dunyoda yetakchi hisoblanadi.
⠀
👷🏼♂️KNAUF PFT G4 - oʻz segmentida birinchi boʻlib tezlik va sifatning yuqori standartlarini oʻrnatgan afsonaviy suvoq mashinasi.
⠀
🧐KNAUF-MP 75 gipsli suvogʻini qo’llashda mashinadan foydalanish qoʻl mehnatiga nisbatan ish jarayonini 3-4 baravar tezlashtiradi.
⠀
☝️Mukammallikka intilish bizning umumiy maqsadimizdir.
⠀
- - - - -
⠀
💪КНАУФ PFT - бесспорный мировой лидер в области производства штукатурных машин и растворных насосов.
⠀
👷🏼♂️КНАУФ PFT G4 - легендарная штукатурная машина, первой задавшая высокие стандарты скорости и качества в своем сегменте.
⠀
🧐Машинное нанесение гипсовой штукатурки КНАУФ-МП 75 это ускорение рабочего процесса в 3-4 раза в сравнении с ручным трудом.
⠀
☝️Стремление к совершенству-наша общая цель.
Сайт|Facebook|Instagram
⠀
#knauf#knaufuzbekistan#PFT#MP75#dos
👷♀️Obyektda katta hajmdagi shpaklyovka ishlarini qanday tez va sifatli bajarish mumkin?
Hammasi oddiy.
Suriladigan materialni havosiz purkaydigan suvoq apparati – PFT SWING Airlessdan foydalaning.👍
Uni tayyor pastasimon KNAUF-Rotband Pasta Profi shpaklyovkasi bilan tandemda ishlatib, siz tezda yakuniy qoplamani eng qisqa vaqt ichida sura olishingiz, obyektni tugatishingiz va yangisini ustida ishlashni boshlashingiz mumkin.
Vaqtni tejang – qoʻlda ishlagandagidan uch karra tezroq.
Uch karra!☝️
Materialni sepish havo kompressori hisobiga emas, balki suriladigan materialning yuqori, 130 bar gacha boʻlgan bosimini yaratish hisobiga taʼminlanadi.
Apparat yuqori unumdorlikka ega va ishlatishga oson.😊
Ogʻirligi 100 kg atrofida.
Bizning maqsadimiz – mukammallikka intilish!
- - - - -
👷♀️Как быстро и качественно выполнить большой объем шпаклевочных работ на объекте?
Все просто.
Используйте PFT SWING Airless – шпаклевочный аппарат безвоздушного распыления наносимого материала.👍
Применяя его в тандеме с готовой пастообразной шпаклевкой КНАУФ-Ротбанд Паста Профи, вы сможете в кратчайшие сроки нанести финишное покрытие, закончить объект и начать работу на новом.
Экономия времени – в три раза быстрее, чем вручную.
В три раза!☝️
Распыление материала обеспечивается не за счет воздушного компрессора, а за счет создания высокого, до 130 бар, давления наносимого материала.
Аппарат обладает высокой производительностью и легкий в управлении.😊
Вес около 100 кг.
Наша цель - стремление к совершенству!
#knaufuzbekistan
#Rotbandpastaprofi
#Ротбандпастапрофи
#pft
#пфт