Регулярно требуется преобразовать какой-либо текст в максимально совместимый текст для 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
🌞 ¡Buenos días! Se acerca el #Verano😎, y queremos saber qué preferiría escuchar por Radio Holguín la Nueva 😃.
Díganos, en los comentarios 👇👇👇, temas para programas y trabajos periodísticos ❓❓❓. Estamos para complacerle, siempre por la 96.1 de la FM y audio real vía Internet ❤.
📸 Periódico Ahora
#SeguimosATodoDar
@fans destacados
Tania Batista Batista
Vivian García
Yulia Nela Puig Aguilera
Marlin Elianis Batista González
Yudelki Castillo Mulet
Odalys Martínez Oliva
Radio Angulo
Telecristal
Confluencia
🔊👤Con vistas a la etapa estival, la Comisión Provincial de Verano realizó la presentación del Proyecto de Recreación y Uso del Tiempo Libre para este período del 2024 que tendrá como eslogan: "Cuba Modo Verano".
🌳☀️Las premisas de trabajo del venidero tiempo de ocio estarán dirigidas a consolidar los espacios abiertos en plazas, parques y comunidades con opciones recreativas acompañadas de música grabada, ofertas gastronómicas de calidad y otras de disfrute general, con la participación de los nuevos actores económicos.
🏖️⛺️Estarán habilitados para lograr el sano esparcimiento los siguientes polos recreativos: Valle de Mayabe y el parque de diversiones "El Mambisito", playa Blanca en "Rafael Freyre"; Caletones y Los Bajos en el municipio de Gibara; asimismo el balneario de Guardalavaca. También estarán a disposición de la población 10 bases de Campismo Popular en varios municipios con servicios de pasadías y alojamiento.
💁♀️🎶En el municipio cabecera se efectuará en el Cine Martí un concierto de la cantautora Lidis Lamorú el día 29 de junio a las 10.00 de la mañana, y ese propio día en el parque Calixto García a las 5:00 de la tarde se llevará a cabo un Encuentro de Ruedas de Casino.
👤Estas y otras actividades se desarrollarán en la etapa estival en el territorio, para que todos escojan las que prefieren y de este modo hacer del período vacacional una etapa de descanso, recreación sana y aprovechar las oportunidades que le propone este programa de actividades en todos los municipios.
📝con información de Periódico ahora
#Holguinsi
#verano
Piscinas hinchables y desmontables. Un regalo imprescindible este verano para refrescarte y mantener la distancia social
#IdeasParaRegalar#Verano#Piscina
https://www.milideaspararegalar.es/blog/piscinas-hinchables-y-desmontables-un-regalo-imprescindible-este-verano/
💻www.milideaspararegalar.es
Piscinas hinchables y desmontables. Un regalo imprescindible este verano para refrescarte y mantener la distancia social
#IdeasParaRegalar#Verano#Piscina
https://www.milideaspararegalar.es/blog/piscinas-hinchables-y-desmontables-un-regalo-imprescindible-este-verano/
💻www.milideaspararegalar.es
Piscinas hinchables y desmontables. Un regalo imprescindible este verano para refrescarte y mantener la distancia social #IdeasParaRegalar#Verano#Piscina
https://www.milideaspararegalar.es/blog/piscinas-hinchables-y-desmontables-un-regalo-imprescindible-este-verano/
💻www.milideaspararegalar.es
Piscinas hinchables y desmontables. Un regalo imprescindible este verano para refrescarte y mantener la distancia social #IdeasParaRegalar#Verano#Piscina
https://www.milideaspararegalar.es/blog/piscinas-hinchables-y-desmontables-un-regalo-imprescindible-este-verano/
💻www.milideaspararegalar.es
Piscinas hinchables y desmontables. Un regalo imprescindible este verano para refrescarte y mantener la distancia social #IdeasParaRegalar#Verano#Piscina
https://www.milideaspararegalar.es/blog/piscinas-hinchables-y-desmontables-un-regalo-imprescindible-este-verano/
💻www.milideaspararegalar.es
💥Kayak Bestway Cove Champion X2
Navega en pareja y disfruta del verano juntos
✅OFERTA: 97.53€
❌ Antes: 159.95€
💰Ahorras un 39%🔥
Diversión asegurada en aguas tranquilas o movidas
👉 Hazte con el tuyo y regala aventuras en Navidad
#kayak#deporte#outdoor#navidad#ofertas#descuentos#viral#verano
🛰️Oferta publicada en Deporte y Outdoor
Disfruta de las noches de #verano con este telescopio con adaptador para móvil. Tendràs fotos inolvidables #Astronomía#Telescopio
https://www.milideaspararegalar.es/producto/telescopio-adaptador-para-movil/
💻www.milideaspararegalar.es
💥Pelota de Fútbol Adidas Telstar
Regala diversión y pasión por el deporte
✅OFERTA: 6.99€
❌ Antes: 10.0€
💰Ahorras un 30%🔥
Alta calidad, diseño icónico y excelente rendimiento en la cancha
👉 Haz feliz a un futbolero esta Navidad
#arena#deporte#outdoor#navidad#descuentos#viral#ofertas#verano
🛰️Oferta publicada en Deporte y Outdoor
Porque este #Verano no puede faltar la #BebidaFría - Esta nevera portátil hinchable se hace imprescindible
#NeveraPortátil#RegalosPrácticos
https://www.milideaspararegalar.es/producto/nevera-portatil-hinchable/
💻www.milideaspararegalar.es
Porque este #Verano no puede faltar la #BebidaFría - Esta nevera portátil hinchable se hace imprescindible
#NeveraPortátil#RegalosPrácticos
https://www.milideaspararegalar.es/producto/nevera-portatil-hinchable/
💻www.milideaspararegalar.es