Регулярно требуется преобразовать какой-либо текст в максимально совместимый текст для 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
How to use Fear & Greed and Altcoin Season indicators to make decisions?
If you trade or invest in crypto, these two indicators will help you understand the overall market sentiment and choose a more intelligent strategy. Let's look at what they show:
😨Fear & Greed Index. Current: 52 — Neutral
This index reflects the emotions of traders:
0–24 — Strong fear. Market is oversold, entry points are possible.
25–49 — Fear. Cautious mood, consolidation possible.
50–74 — Greed. Investors are confident, but they should be more careful.
75-100 — Strong greed. Overheating and rollback may occur.
🤔What to do:
If fear is high (especially <25) — consider purchases.
If you are very greedy (>75) — take profit, do not enter at highs.
💎Altcoin Season Index. Current: 17/100
This indicator shows who dominates the market — Bitcoin or altcoins:
<25 — Bitcoin Season: Capital Flows into Bitcoin, Alts Weaken.
25–75 — Mixed phase.
>75 — Altcoin Season: altcoins are actively growing.
🤔What to do:
Now (17/100) — Bitcoin dominates. Risks for altcoins are higher. Better to focus on BTC and wait for a trend change.
When >75 - you can look for alts with strong dynamics and enter them on growing interest.
🐃Trade in Telegram mini app
#Crypto#AltcoinSeason#FearAndGreed
🪙EthGlobalNews | #BTCMarket Alert
🚨 ALERT: #Crypto sentiment has plunged into extreme fear — the lowest since March.
#Bitcoin is hovering near $100K while gold and silver rally sharply after the US government shutdown ended.
——————
📌 市場情緒跌至三月以來最低點;避險資產走強下,BTC 價格仍承壓震盪。
#FearAndGreed#Macro
———
👍@Web3NewsInsight
🥲
🥲Follow for more Web3 News
🤣
Crypto Market Faces Severe Downturn
1️⃣ BTC inflow to exchanges hits annual high amidst panic. Price dropped below $90,000, triggering massive sell-offs.
2️⃣ Fear & Greed Index plunges to extreme fear (25), signaling anxiety in crypto markets.
3️⃣ BTC holders recorded losses of $1.73 billion, marking the highest since August 2024.
4️⃣ ETF funds faced major outflows totaling $1.01 billion, a record since launch.
5️⃣ Meme coins like Dogecoin and Shiba Inu drop significantly, as market saturation affects their traction.
6️⃣ New AI-meme project MIND of Pepe raises $6.8 million, distinguishing itself with functional AI integration.
7️⃣ Ethereum Foundation pledges $1.25 million for legal defense of Tornado Cash developer.
📈More Details on Bitcoin Rally Potential
🔗Ethena Stablecoin Investment
🔗Optifye Startup Controversy
#Crypto#BTC#ETH#MemeCoins#AI#MarketTrends#Investments#Outflows#FearAndGreed#Blockchain#Saturation#MarketAnalysis#DeFi#Ethereum#TornadoCash#VC#WhaleAlert#YCombinator#Optifye#MINDofPepe