Регистры#
На самом деле, snake
, kebab
и т. д. не являются функциями. Они являются экземплярами класса Case
, который реализовал object.__call__
dunder метод для удобства: Case.__call__
. Этот декларативный синтаксис позволяет гибко описывать текстовые случаи, сохраняя при этом всю функциональность.
Вы можете увидеть полный список всех встроенных случаев в Спецификации API.
Как работает преобразование регистра?
Преобразование регистра происходит в три этапа:
- Разделение: входной
text
делится на слова путем сканирования границ. Границы — это условия (или разделители), которые сигнализируют, где заканчивается одно слово и начинается другое. Например, граница может обнаружить подчеркивание, изменение со строчных букв на заглавные, или даже переход цифра-буква. Каждый раз, когда обнаруживается граница, строка разделяется в этой позиции. - Преобразование: после того, как
text
разделен на слова, применяетсяtransform
. Эта функция (которую вы можете настроить) определяет, как будет преобразовано каждое слово. Например, к каждому слову можно применить преобразование к строчным буквам, капитализацию или полностью собственное преобразование. - Объединение: наконец, преобразованные слова объединяются обратно вместе с помощью определенного
delimiter
. Этотdelimiter
специфичен для стиля регистра (например, подчеркивания ("_"
) для регистраsnake
или дефисы ("-"
) для регистраkebab
).
Результатом является входной текст, преобразованный в нужный регистр.
Создание кастомных регистров#
Подобно Boundary
, есть класс Case
, который позволяет вам определить пользовательский регистр, который ведёт себя как встроенный:
cases/custom_case.py | |
---|---|
Поскольку
dot
является экземпляромCase
, он уже преобразует текст в регистрdot
— просто вызовите его как функцию!Для
dot
вам не нужно писать пользовательскую функцию для проверки регистра; просто используйте его методmatch
!Опять же, используя метод
match
, вы можете легко проверить, находится ли строка в регистреdot
без какого-либо дополнительного кода!
Чтобы узнать больше о создании кастомного регистра с нуля, взгляните на класс Case
.