TGTGInsighttelegram intelligenceLIVE / telegram public index
← Python Заметки

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

Резултати

Пронајдени 1 слични објави

Пребарај: #usau19

当前筛选 #usau19清除筛选
AI match predictions

@ai_match_prediction · Post #11204 · 28.03.2026 г., 05:05

Friendlies🏳 2026-03-28 09:30 UTC Hungary U17 vs. Moldova U17 Predicted outcome: Hungary U17✅ Predicted score: 2:1 Actual: Hungary U17 3:1 #HungaryU17#MoldovaU17 2026-03-28 10:00 UTC Wales U19 vs. USA U19 Predicted outcome: USA U19✅ Predicted score: 0:1 Actual: USA U19 0:4 #WalesU19#USAU19 2026-03-28 11:35 UTC China PR U23 vs. Korea DPR U23 Predicted outcome: Draw✅ Predicted score: 1:1 Actual: Draw 1:1 #ChinaPRU23#KoreaDPRU23 2026-03-28 13:00 UTC Zambia U23 vs. Malawi Predicted outcome: Zambia U23✅ Predicted score: 2:1 Actual: Zambia U23 1:0 #ZambiaU23#Malawi 2026-03-28 13:30 UTC India U23 vs. Bhutan U23 Predicted outcome: India U23✅ Predicted score: 3:1 Actual: India U23 5:0 #IndiaU23#BhutanU23 2026-03-28 14:00 UTC South Korea vs. Ivory Coast Predicted outcome: Draw❌ Predicted score: 1:1 Actual: Ivory Coast 0:4 #SouthKorea#IvoryCoast 2026-03-28 14:00 UTC San Marino vs. Faroe Islands Predicted outcome: Faroe Islands✅ Predicted score: 0:2 Actual: Faroe Islands 1:2 #SanMarino#FaroeIslands 2026-03-28 14:00 UTC Kyrgyzstan vs. Madagascar Predicted outcome: Madagascar✅ Predicted score: 1:2 Actual: Madagascar 2:5 #Kyrgyzstan#Madagascar 2026-03-28 14:00 UTC Portugal U18 vs. Iceland U19 Predicted outcome: Portugal U18✅ Predicted score: 2:1 Actual: Portugal U18 4:0 #PortugalU18#IcelandU19 2026-03-28 16:00 UTC Senegal vs. Peru Predicted outcome: Senegal✅ Predicted score: 2:1 Actual: Senegal 2:0 #Senegal#Peru 2026-03-28 16:00 UTC Botswana vs. Zimbabwe Predicted outcome: Zimbabwe✅ Predicted score: 0:1 Actual: Zimbabwe 0:3 #Botswana#Zimbabwe 2026-03-28 16:00 UTC Egypt U20 vs. Algeria U20 Predicted outcome: Draw✅ Predicted score: 1:1 Actual: Draw 2:2 #EgyptU20#AlgeriaU20 2026-03-28 17:00 UTC Hungary vs. Slovenia Predicted outcome: Draw❌ Predicted score: 1:1 Actual: Hungary 1:0 #Hungary#Slovenia 2026-03-28 17:00 UTC Scotland vs. Japan Predicted outcome: Draw❌ Predicted score: 1:1 Actual: Japan 0:1 #Scotland#Japan 2026-03-28 18:00 UTC Burkina Faso vs. Guinea-Bissau Predicted outcome: Burkina Faso✅ Predicted score: 2:1 Actual: Burkina Faso 5:0 #BurkinaFaso#GuineaBissau 2026-03-28 18:00 UTC USA U18 vs. Morocco U18 Predicted outcome: USA U18❌ Predicted score: 2:1 Actual: Morocco U18 1:2 #USAU18#MoroccoU18 2026-03-28 19:30 UTC USA vs. Belgium Predicted outcome: USA❌ Predicted score: 2:1 Actual: Belgium 2:5 #USA#Belgium 2026-03-28 22:00 UTC Brazil U20 vs. Paraguay U20 Predicted outcome: Brazil U20✅ Predicted score: 3:1 Actual: Brazil U20 3:1 #BrazilU20#ParaguayU20 2026-03-29 00:00 UTC Haiti vs. Tunisia Predicted outcome: Tunisia✅ Predicted score: 1:2 Actual: Tunisia 0:1 #Haiti#Tunisia 2026-03-29 01:00 UTC Mexico vs. Portugal Predicted outcome: Portugal❌ Predicted score: 1:2 Actual: Draw 0:0 #Mexico#Portugal #Football#Friendlies