Регулярно требуется преобразовать какой-либо текст в максимально совместимый текст для 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
#Notification#Howard_Wu
模块:io.github.howard20181.notificationiconfix
简介:Notification Icon Fix / 通知图标修复
版本:103-1.7.1
更新时间:2026/03/23 00:03:03
更新日志:
变更日志
重构图标生成算法,现在背景是渐变色的也可以计算轮廓
支持 API 101
Changelog
Refactored icon generation algorithm; now it can calculate outlines even with gradient backgrounds.
Added support for API 101.
Fix #1,#12,#13
@lsposed_Modules_Updates_Trackers | @lsposed_Geeks_Bot
#异常通知
我们监控到 洛杉矶2节点出现故障,目前我们正在联系上游询问具体原因,请大家耐心等待。
给您带来不便深表歉意,如有其他疑问请提交服务单联系我们。
#Notification of Anomaly
We have detected a malfunction at the Los Angeles2 node. We are currently contacting upstream suppliers to inquire about the specific cause. Please be patient.
We sincerely apologize for any inconvenience this may cause. If you have any further questions, please submit a service request to contact us.
#异常通知
我们监控到 United Kingdom 区域的1台节点 (Node: GBC) 出现 内存故障,导致内核崩溃一直重启,我们已重新部署新的实例节点,将逐步迁移受影响的实例到同区域新的实例节点上,迁移之间您的实例将会有短暂的失联状态,迁移花费时长将和您的实例磁盘大小有关系,请大家耐心等待。
给您带来不便深表歉意,如有其他疑问请提交服务单联系我们。
#Notification of Anomaly
We have detected a memory failure on one node (Node: GBC) within the United Kingdom region, resulting in a kernel crash and continuous reboots. We have redeployed a new instance node and will progressively migrate affected instances to this new node within the same region. During migration, your instances may experience brief periods of unavailability. The duration of migration will depend on the disk size of your instance. We kindly request your patience during this process.
We sincerely apologise for any inconvenience caused. Should you have further queries, please submit a support ticket to contact us.
#异常通知
我们检测发现我们的SGS区域由于我们和上游的备份BGP Session没有生效,导致上游在维护时和上游的BGP Session断开,目前正在修复,带来不便深表歉意,请耐心等待。
#Notification of Anomaly
We have discovered that our SGS region experienced a disconnection during upstream maintenance due to the failure of our backup BGP Session with the upstreams. We are currently working on fixing this issue and sincerely apologize for any inconvenience caused. Please be patient.
#异常通知
我们监控到 Germany 区域的1台节点 出现 硬件故障,上游正在安排远程手进行查看,请大家耐心等待。
给您带来不便深表歉意,如有其他疑问请提交服务单联系我们。
#Notification of Anomaly
We have detected a hardware failure on one node in the Germany region. Upstream personnel are arranging for remote assistance. Please wait patiently.
We sincerely apologize for any inconvenience this may cause. For any further questions, please submit a service request to contact us.
#异常通知
我们监控到 Singapore Standard 区域的1台节点 出现 磁盘阵列 故障,读写性能下降,我们将在明后天逐步迁移受影响的实例到同区域的其他节点上,迁移之间您的实例将会有短暂的失联状态,迁移花费时长将和您的实例磁盘大小有关系,请大家耐心等待。
给您带来不便深表歉意,如有其他疑问请提交服务单联系我们。
#Notification of Anomaly
We have detected a disk array failure on one node in the Singapore Standard region, resulting in decreased read and write performance. We will be gradually migrating affected instances to other nodes in the same region over the next two days. Your instance will experience a brief period of inaccessibility during the migration. The migration time will depend on the size of your instance's disk. Please be patient.
We sincerely apologize for any inconvenience this may cause. If you have any further questions, please submit a service request to contact us.
#异常通知
我们监控到 盐湖城节点出现故障,目前我们正在联系上游询问具体原因,请大家耐心等待。
给您带来不便深表歉意,如有其他疑问请提交服务单联系我们。
#Notification of Anomaly
We have detected a malfunction at the Salt Lake City node. We are currently contacting upstream suppliers to inquire about the specific cause. Please be patient.
We sincerely apologize for any inconvenience this may cause. If you have any further questions, please submit a service request to contact us.
@shiiinabot
Qué puede hacer este bot?
Un bot para eliminar automáticamente los mensajes no deseados predefinidos del grupo.
Idioma: Portugués
(visto en @BotsGram_cu)
#delete, #group, #notification, #message, #regex, #spam, #picture, #remove
@TodoTask_bot
Qué puede hacer este bot?
Bot simple que ayuda a realizar un seguimiento y te recuerda las tareas pendientes
Idioma: Inglés
(visto en @BotsGram_cu)
#todo, #organize, #productivity, #do, #remind, #alarm, #notification, #notify