Регистры#
На самом деле, 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.