Регулярно требуется преобразовать какой-либо текст в максимально совместимый текст для 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
🔻 RT @60PlusAssoc: 60 Plus President @sanuzis said, “On behalf of more than five million senior citizen supporters we applaud Sen @tedcruz for introducing S. 275, the Retirement Freedom Act that will allow individuals to choose to opt out of the #Medicare part A benefit." https://t.co/YU2i7whWK8
June 24, 2021 at 07:52PM
via Twitter
@SenTedCruz
Donald Trump bragged that the U.S. is spending so much money on his war in Iran it has no funds to pay for daycare or healthcare. 💰⚔️
The 79-year-old president made the boast during a typically rambling speech while hosting an Easter lunch at the White House on Wednesday. 🦅🍽
“The United States can’t take care of daycare. That has to be up to a state,” Trump said. “We’re a big country. We have 50 states. We have all these other people, we’re fighting wars. We can’t take care of daycare. You’ve got to let a state take care of daycare, and they should pay for it too.” 🏛💼
“Medicaid, Medicare, all these individual things. They can do it on a state basis. You can’t do it on a federal [level]. We have to take care of one thing: military protection—we have to guard the country. But all these little things, all these little scams that have taken place, you have to let states take care of them.” 🎖🛡
#Trump#Medicare
👂More on Trump's Ear
⚠️
Summed AI Secures $500K Funding
Summed AI has raised $500K in funding to enhance its AI-driven platform that streamlines Medicare sales calls. The innovative technology allows users to access Medicare plan benefit details 90% faster, improving client enrollment and retention processes. For more information, visit Summed AI.
#Funding#AI#Medicare#Healthcare
🏥💸20 MILLION AMERICANS HIT BY HEALTHCARE "SUBSIDY CLIFF" — PREMIUMS DOUBLE OVERNIGHT
🔹 Congress failed to extend enhanced ACA subsidies expiring Dec 31 — families face 100%+ premium hikes starting January 2026 📈
🔹 Medicare Part B premiums jump $17.90/month to $202.90, eating away entire 2.8% Social Security COLA increase 💰
🔹 Social Security taxable earnings cap rises to $184,500 from $176,100 — higher earners pay more into system 📊
🔹 New senior tax deductions passed but millions may drop coverage entirely due to affordability crisis 🚨
Congress left 20 million hanging while pharma lobbies got their wins 😡🔥
#Healthcare#Medicare
@america
💥 Social Security and Medicare on the brink of disaster! 💔😢
Trust funds rapidly depleting, retirees in jeopardy 😱
Benefit cuts looming, up to 23% reduction! 💔💸
Healthcare access at risk, hospitals facing delays! 🏥😷
Presidential candidates must address this crisis! 🗳️🤔
Bipartisan solutions needed, time is running out! ⏰🤝
Fiscal commission proposed for comprehensive action! 💪💼
Let's save these vital programs for future generations! 🙏🌍
#SocialSecurity#Medicare#RetirementCrisis#BipartisanSolutions
https://www.foxbusiness.com/politics/social-security-trust-fund-path-insolvency
Subscribe to @BadVolfNews
#The_Barron's 🇺🇸📕[PDF]⬇️
3 #November2025
#Weekly_Magazines
For learning, for free(dom).
@backupofmagazines
Barron’s says Boeing is back, as new leadership tackles years of crises. A warning on “crypto-treasury” firms shows #Bitcoin risk. #Meta’s AI buildout has flaws, while funds that track #Buffett surge. Don’t count out the #Jobs market; the classic 60/40 portfolio is hot again. Features span medical devices, housing-broker disruption, dividend diversification, and mortgage #REITs. Global angles include Gulf states’ #AI push and Argentina’s reform shot. Columns debate #Fed signals, tech overspending, and Musk’s trillion-dollar gambit, plus strategies to lower #Taxes and a key #Medicare to-do for retirees. #Stocks#Markets#Investing#Boeing#Economy#ETFs