@airportroster · Post #576 · 20.02.2022 г., 06:59
#编号480 #WallLess#无界 收录时间:2022.02.20 官网:https://www.wallless.xyz 群组:@wjvpn 频道:@wujie_notice 商店截图
TGINSIGHT SIMILAR POSTS
Изворен канал @pythonotes · Post #121 · 20 јул.
Регулярно требуется преобразовать какой-либо текст в максимально совместимый текст для 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
Пребарај: #wallless
@airportroster · Post #576 · 20.02.2022 г., 06:59
#编号480 #WallLess#无界 收录时间:2022.02.20 官网:https://www.wallless.xyz 群组:@wjvpn 频道:@wujie_notice 商店截图
@guyingcs · Post #304 · 30.04.2024 г., 11:16
#五一优惠码#优惠码 #Kuromis 优惠码: 2024-Labor-Day 有效期至:2024/05/14 00:00:00 #FlowerCloud 优惠码: BINGSUANG 2024年4月1日 0:00 开始到4月30日 23:59 全场 8折,不包括 Air/企业套餐 #Ytoo 优惠码: 202401 2024年4月1日 00:00 至2024年4月30日 23:59 结束 全场 8.8 折,不包括Air/Team套餐 #Anyland 福利第一重年套餐(特别优惠)9折特惠,特惠码: 51go 福利第二重 购买年套餐(特别优惠),赠送有效时长: Plus年套餐(特别优惠):赠送30天有效时长; VIP、King年套餐(特别优惠):赠送45天有效时长。 福利第三重 独享福利账号大赠送: 不限时流量套餐500G或以上:Tiktok/Instagram独享账号2选1赠送 Mini年套餐(特别优惠): ChatGPT/Tiktok/Instagram独享账号3选1赠送 Basics年套餐(特别优惠): ChatGPT/Tiktok/Instagram独享账号3选2 赠送 Plus、VIP、King年套餐(特别优惠):美区苹果iCloud账号/ChatGPT/Tiktok/Instagram独享账号4选3 赠送 活动时间:2024年4月27日到2024年5月10日 #XFSS#XFLTD 优惠码: 拼命打工人 年付不可用 活动时间:0425 - 0506 #OuO 八折优惠码: 20%OFF #阿伟云 月付套餐8.5折优惠码: 5.1 2024/5/7 23:59结束 #NiceDuck 9折优惠码: duck-9 限月付、季付、半年付使用 8折优惠码: duck-8 限年付使用 有效期:2024/4/28—2024/5/2 #蛋挞云 8折优惠码: 5.1HappyHappy #CoffeeCloud 全场85折优惠码: Labour 活动时间:4.29~5.5 #跑路云 季付/年付九折优惠码: The-Other-Side 5月6号10点结束 #ESNC 2024/04/29 23:20 ~ 2024/05/05 23:59 除Tiny可用 88折优惠码: 12% OFF #SWIFT 优惠码: Happy5.1 有效期截止到5.5 #YkkCloud 年付七折优惠码: rDtveMFT 季付及半年付七五折优惠码: JCgBksWJ 月付八折优惠码: naj186gO 有效期至:2024/05/07 23:59 ##TsunamiNet 任意订阅年付75折折扣码: May the Tides Be with You 持续到 5.7 #私房菜 月付以上9折: labor9 年付以上85折: labor85 4.29-5.10 可用 #CTC02 85折优惠卷: 15%OFF 活动时间至5月6日 #Wallless 9折优惠码: MF0mmB3L 8折优惠码(年付可用,限量!): U813PBkH 新购、续费均可使用 每人限用一次 #FANRR 适用范围:任意订阅 七折优惠码: GenShinMaster 有效期至:2024/05/10 23:59 #一分机场 五一8折优惠码: 202405 有效期至 2024-05-07 #Oppenheimer 通用75折优惠码: happy51 季付年付以上6折优惠码: happier51 活动时间从4/30-5/10 排名不分先后