Source code for betty.string
"""
Provide string handling utilities.
"""
import re
_CAMEL_CASE_PATTERN = re.compile(r"(?<!^)(?=[A-Z])")
[docs]
def camel_case_to_snake_case(string: str) -> str:
"""
Convert camel case to snake case.
"""
return _CAMEL_CASE_PATTERN.sub("_", string).lower()
[docs]
def camel_case_to_kebab_case(string: str) -> str:
"""
Convert camel case to kebab case.
"""
return _CAMEL_CASE_PATTERN.sub("-", string).lower()
[docs]
def upper_camel_case_to_lower_camel_case(string: str) -> str:
"""
Convert upper camel case to lower camel case.
"""
if not string:
return string
return string[0].lower() + string[1:]
[docs]
def snake_case_to_upper_camel_case(string: str) -> str:
"""
Convert snake case to upper camel case.
"""
return "".join(
(
substring[0].upper() + substring[1:] if substring else ""
for substring in string.split("_")
)
)
[docs]
def snake_case_to_lower_camel_case(string: str) -> str:
"""
Convert snake case to lower camel case.
"""
string = snake_case_to_upper_camel_case(string)
return string[0].lower() + string[1:] if string else ""
[docs]
def kebab_case_to_lower_camel_case(string: str) -> str:
"""
Convert kebab case to lower camel case.
"""
return upper_camel_case_to_lower_camel_case(
"".join(
(
substring[0].upper() + substring[1:] if substring else ""
for substring in string.split("-")
)
)
)