Регулярно требуется преобразовать какой-либо текст в максимально совместимый текст для 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
3 hours ago, James Fickel (@jamesfickel) swapped another 350 $WBTC for 6,905 $ETH ($24.4M) at ~$3,534 as the $ETH price soared 20% (24H)!
Note that since Dec 30, 2023, the founder of Amaranth Foundation has been bullish on the ETH/BTC trading pair, borrowing and exchanging 2,741 $WBTC for 50,688 $ETH at an ETH/BTC ratio cost of 0.054.
Follow @spotonchain and visit James Fickel’s address at https://platform.spotonchain.ai/en/profile?address=0xd85351181b3f264ee0fdfa94518464d7c3defada
#EthereumETF#Approval
🎧⤴
Ethereum ETF Set to Ignite Prices – Could ETH Hit $4,500?
Monochrome Asset Management has filed to launch an Ethereum ETF in Australia under the ticker "IETH." If approved, the ETF will offer a regulated way for retail investors to buy into Ethereum, marking a crucial expansion of crypto products in Australia. Analysts predict this could push ETH prices towards $4,500, especially if Bitcoin continues its upward momentum.
Verse 1:
ETF drop, watch the markets shake,
IETH comin’, time to raise the stake,
Aussie brokers lined up, ready to go,
Regulated crypto, yeah, it’s the show.
Chorus:
Will ETH hit that 4-5-0-0?
Markets movin’ fast, now they wanna know,
Monochrome pushin’ for the big rise,
Crypto to the moon, no surprise.
Verse 2:
Bitcoin’s on fire, aim for that 100K,
Ether right behind, it’s a bull run day,
Dual-access cash flow, simple as can be,
Australian retail gonna stack that ETH, see?
Chorus:
Will ETH hit that 4-5-0-0?
Markets movin’ fast, now they wanna know,
Monochrome pushin’ for the big rise,
Crypto to the moon, no surprise.
Bridge:
Hold tight, watch that price climb high,
Regulated ETF, no more askin’ why,
Cash or in-kind, take your pick,
Ethereum’s future, man, it’s lookin’ slick.
Verse 3:
From Bitcoin to ETH, it’s all on track,
Regulators here, no more lookin’ back,
Australia leads, yeah, they’re paving the way,
Crypto in the mainstream, here to stay.
Chorus:
Will ETH hit that 4-5-0-0?
Markets movin’ fast, now they wanna know,
Monochrome pushin’ for the big rise,
Crypto to the moon, no surprise.
#EthereumETF
#CryptoInvestment
#TONCryptoNewsRapStyle
🎧@toncoin_rap
🌐Breaking News: Investment bank TD Cowen predicts a delay in the U.S. SEC approval for an #Ethereum spot ETF.
Analysts suggest the SEC might be cautious, observing outcomes from #Bitcoin ETFs first, before greenlighting #Ethereum or other crypto ETFs.
#CryptoNews#ETFApproval#SEC#EthereumETF
-
Crypto GALAXY
Crypto Funds Struggle Compared to Bitcoin
OKX's founder Star claims no crypto fund has outperformed Bitcoin over the last decade, predicting a 100x growth for the industry. He acknowledged feedback on OKB's lack of use cases and poor listings. A new secret business line for OKX is set to launch in February.
In other news, Ethereum spot ETFs saw a net outflow of $39.432 million, while Bitcoin ETFs faced a larger outflow of $284 million. Notably, BlackRock's ETHA and IBIT ETFs saw significant inflows.
Read more about OKX's updates here, Ethereum's ETF activity here, and Bitcoin's ETF activity here.
#OKX#Bitcoin#Ethereum#Crypto#ETFs#BlackRock#OKB#NFTs#Web3#DeFi#Soneium#S.BLOX #Blockchain#Investing#Finance#BitcoinETF#EthereumETF#VC#AI
🚀 Morgan Stanley Explores Tokenized Money-Market Fund After Bitcoin ETF Launch
Morgan Stanley, managing $9.3 trillion in client assets, is considering launching a tokenized money-market fund following its recent introduction of a spot Bitcoin ETF. According to NS3.AI, Amy Oldenburg from Morgan Stanley highlighted the bank's interest in tax-loss harvesting for digital assets through its subsidiary, Parametric. Data from Farside Investors indicates that the new Bitcoin ETF has attracted approximately $46 million in net inflows since its launch on Wednesday. Additionally, Morgan Stanley submitted applications in January for ETFs linked to Ethereum and Solana.
#MorganStanley#TokenizedMoneyMarketFund#BitcoinETF#DigitalAssets#TaxLossHarvesting#EthereumETF#SolanaETF#Parametric#NS3AI#FarsideInvestors#CryptoInvesting#BTC#ETH#SOL