Регулярно требуется преобразовать какой-либо текст в максимально совместимый текст для 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
Вчера закончила читать новеллу "Три жизни, три мира: Десять ли персиковых цветков" Тан Ци, а сегодня забрала последний том "Покорения дворца Яньси" Чжоу Мо. Как будто бы знак свыше...
#China#novel#ZhouMo#YanxiPalace
Наконец-то дождалась выхода второго тома новеллы Чжоу Мо "Покорение дворца Яньси"! Третий уже не за горами, так что можно будет познакомиться с этой историей.
Немного озадачило то, что второй том в два раза тоньше первого – очень контрастно смотрится. Но главное – содержание. Так что постараюсь в ближайшее время оценить.
#China#novel#ZhouMo#YanxiPalace
Анонс третьего тома китайской новеллы Чжоу Мо. Покорение дворца Яньcи — Хозяйка дворца
Серия Гаремы китайских императоров
Выход намечен на ноябрь 2024 г.
Аннотация: Чтобы докопаться до правды и наказать всех виновных в смерти своей прошлой госпожи, Вэй Инло становится хозяйкой дворца Яньси и любимицей императора.
Двор — опасное место, и девушке предстоит использовать всю свою смекалку, чтобы справедливость наконец восторжествовала.
Художник обложки: Naoki dead
#China#novel#ZhouMo#YanxiPalace#анонсы
Новая серия от Mainstream:Гаремы китайских императоров
Чжоу Мо (周末). Покорение дворца Яньси (延禧攻略). Том 1. Путь служанки (2018, 203ch+2ex)
Планируется три тома!
Аннотация: В эпоху тайных заговоров династии Цин Вэй Инло решает вступить в Запретный Город, чтобы разгадать загадку смерти своей сестры. В мире интриг и опасности она обнаруживает, что любовь и предательство переплетаются в самых неожиданных местах.
"Покорение дворца Яньси" — это история о риске, любви и тайнах, где каждое решение может стать роковым.
Ожидается в апреле 2024 г.
Художник: Naoki dead
В 2018 г. вышла одноименная 70-серийная дорама.
#China#novel#ZhouMo#YanxiPalace#анонсы
⭐️Она посмотрела на изящное и драгоценное дерево и пробормотала:
– В Запретном городе все решает благосклонность императора – иногда даже у дерева больше прав, чем у человека. (Глава 17. Первая встреча)
⭐️— Когда-то они были близкими подругами, а теперь готовы убить друг друга, чтобы сделать своих сыновей наследниками трона. — Благородная супруга Сянь медленно натянула платье на плечо, закрывая татуировку. — Я буду с нетерпением ждать этого представления! (Глава 107. Канун Нового года)
Я тут внезапно за пару недель прочла все три тома «Покорения дворца Яньси» Чжоу Мо (周末. 延禧攻略, 2017) и осталась крайне довольна. Получила всё, что хотела:
🌟 Впечатляющую, местами стервозную, но очень расчётливую и безжалостную главную героиню, которая пришла в Запретный город, чтобы отомстить за убитую сестру, но в итоге перевернула его вверх дном, всполошив всех местных змеиных обитателей и обитательниц.
🌟Исторический сеттинг: «Дворец Яньси» можно в каком-то смысле считать продолжением романа «Поразительное на каждом шагу» (только на этот раз обошлось без попаданок), поскольку действие разворачивается во времена правления императора Айсиньгёро Хунли (1735-1796) – сына Айсиньгёро Иньчжэня (1722-1735), который в романе Тун Хуа борется за власть и за любовь. Хунли увереннее, чем его отец, сидит на троне, чего не скажешь о его императрице, которая в гареме выживает, как на поле боя. Знающие историю Цинской династии с момента первого упоминания имени героини словят спойлер и догадаются, чем дело кончится, поэтому в таких сюжетах важен не столько конец, сколько путь, который проходят герои, чтобы до него добраться (желательно живыми).
🌟 Зашкаливающее количество интриг и многоходовок: в какой-то момент от них начало мутить, потому что казалось, что героини буквально живут и дышат двумя целями в жизни – забраться в постель к императору и выкинуть оттуда соперницу так, чтобы она упала сразу в могилу. Но это не отменяет виртуозность выстраиваемых конструкций. Для меня дворцовый сеттинг открылся с неожиданной стороны: я его стала воспринимать как игру на выживание, в которой я бы слилась прям в первом раунде.
В связи с таким внезапным вбросом давайте вернёмся к старым-добрым опросам, которые я не проводила аж полгода (позор мне). Расскажите, как вы относитесь к дворцовому сеттингу (не обязательно китайскому – такого добра хватает и в Корее, и в Турции, и ещё много где) и есть ли у вас примеры любимых тайтлов (романов или сериалов). А если же вы сможете отрефлексировать, что именно зацепило, получите в ответ лучи любви и обожания от админа.
#China#novel#ZhouMo#YanxiPalace#отзыв#админ_анализирует
Модный приговор Цинской династии
Начала читать "Поэму о Шанъян" Мэй Юйчжэ и сразу зацепилась за любопытный момент, который подмигнул недавно дочитанному "Покорению дворца Юньси" Чжоу Мо
🪷 В "Шанъян" в самом начале героиня участвует в церемонии цзили (обряд инициации для девушек, которые по достижении 15 лет прощаются с детством и получают шпильку) и меняет свои детские одежды на взрослые. Одной из новых деталей в её гардеробе становятся носки с особой припудренной подошвой, которые после себя оставляют следы в виде лепестков роз. Увидев это чудо, героиня признала идею замечательной.
🪷 Чего не скажешь об императоре Хунли в "Яньси". Когда он отбирал новых наложниц в свой гарем, среди кандидаток была одна пренеприятная девица, которая наехала на главную героиню (тогда ещё служанку), за что та дала ей "хороший" совет: припудрить подошвы обуви, на которых вырезаны лотосы, чтобы цветы расцветали при каждом её шаге. В качестве исторической отсылки она привела пример из жизни императора император Сяо Бацзюаня (кон. V — нач. VI вв., эпоха Северных и Южных династий):
⭐️ Я неграмотна, но слышала от учёных людей, что император Сяо Баоцзюань для своей обожаемой наложницы, госпожи Пань, приказал вырезать узор из лотосов на золотом помосте. Когда она шла, казалось, что с каждым её шагом расцветают лотосы. Зрелище было поистине великолепным, неудивительно, что он в ней души не чаял. Сегодня мои скромные навыки сгодились лишь для того, чтобы с помощью пудры заполнить резные щели на вашей подошве. Желаю, чтобы ваша заветная мечта сбылась и вы добились высокого места при дворе! (Глава 4. Лотосовые шаги)
Но затея пришлась императору-маньчжуру не по вкусу. Он осудил и лотосовые шаги, и перебинтованные "лотосовые" ножки, заклеймив их варварскими и безнравственными, а императора Сяо Баоцзюаня назвав тираном, пригревшим бесстыжую распутницу (какое непочтительное отношение к ханьским предшественникам, хотя подтверждений, что госпожа Пань бинтовала ноги, нет!). В итоге девушку из дворца погнали, а вместо лотосовых следов за ней тянулись кровавые дорожки.
И хотя мода времён династии Цин мне не очень близка, но с критикой "варварских обычаев", наносящих вред здоровью женщины, не поспоришь (с позиции просвещённой современности, конечно).
#China#novel#ZhouMo#YanxiPalace#МэйЮйчжэ#ПоэмаОШанъян#заметки