Регулярно требуется преобразовать какой-либо текст в максимально совместимый текст для 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
Пока в нескольких регионах РФ проходят испытания гибридные трактора Zoomlion DV3354, на Ленинградской земле испытывали трактор PG2004 с Немецкой полуавтоматической трансмиссией PowerShift (ZF).
Работа с плугом Kverneland PN100-5 (5 корпусов)на тяжелых почвах.
Глубина обработки 30 см
Скорость 8-9 км/ч
На глубине 20-25 см
Скорость 10-11 км/ч
Работа с тяжелым дискатором (5800 кг)
Диаметр дисков 660 мм.
Глубина обработки 12 см
Скорость 10-12 км/ч
С поставленными задачами трактор Zoomlion PG2004 справился, отмечено что потребление топлива значительно меньше в сравнении с механическими трансмиссиями, выше производительность и комфорт механизатора!
#Агромаг#испытания#демо#Zoomlion@Zoomlion_AG_Rus#PG2004#ZF#PowerShift#лучшийтрактор#Kverneland
Забудьте про ручное переключение!
С трансмиссией от мирового производителя ZF установленной на PG2004 вы получите плавность управления и точность, которые делают каждый проход по полю эффективным. Мягкая смена скоростей не только экономит ваше время, но и снижает утомляемость, позволяя работать с максимальной отдачей.
Трактор Zoomlion PG2004 — это трактор с мощностью 200 л.с. и оснащенный передовыми технологиями, которые минимизируют расход топлива, что снижает эксплуатационные расходы.
Zoomlion PG2004 — европеец в Китайской шкуре!
🌟🌟🌟Если у Вас есть потребность в таком тракторе, мы готовы предоставить его для Вас на демо испытания!🌟🌟🌟
За дополнительной информацией обращайтесь в отдел продаж +79006331826
#Агромаг#лучшийтрактор#демо#испытания#технологии#PG2004#ZoomlionPG2004#китайскийтрактор#ZF#европеец
https://x.com/zachqfish/status/2053461293190062283?s=52
🙏 Why We Cannot See Creator
Sometimes people ask, “Why can’t we see Creator?”
It’s a beautiful question, and one that has echoed through humanity since the beginning of time.
Maybe the answer is simpler than we think.
A child in the womb cannot see its mother.
It cannot comprehend the world beyond the walls that surround it. It does not know who is feeding it, protecting it, or sustaining every breath and heartbeat. And yet, the mother is there the entire time... loving, nourishing, and holding that child in perfect care.
The child may not understand the mother, but the mother understands the child completely.
In many ways, we are no different.
We live inside a vast and mysterious universe, surrounded by intelligence, beauty, and order far beyond what our minds can fully grasp. We may not be able to see Creator with our physical eyes, but we can witness the fingerprints of Creator everywhere... in the rhythm of our hearts, the precision of nature, the power of love, and the quiet inner knowing that reminds us we are never alone.
Perhaps this life is a sacred womb.
A place where our souls are growing, learning, and preparing for a greater birth into a reality we cannot yet imagine.
And just like the child in the womb, we may not fully understand what holds us.
But we are held.
We are guided.
We are loved beyond measure.
One day, when the veil lifts and our awareness expands, we may realize that what we were searching for was never separate from us.
Creator was not hidden.
Creator was carrying us all along.
ZF 🔥
#Creator#Faith#SpiritualAwakening#TheWayOfBeing#DivinePresence#Awakening#Consciousness#NewEarth#TrustTheJourney#ZF🔥