import re from keyword import iskeyword import stringcase def sanitize(value: str) -> str: return re.sub(r"[^\w _\-]+", "", value) def fix_keywords(value: str) -> str: if iskeyword(value): return f"{value}_" return value def group_title(value: str) -> str: value = re.sub(r"([A-Z]{2,})([A-Z][a-z]|[ \-_]|$)", lambda m: m.group(1).title() + m.group(2), value.strip()) value = re.sub(r"(^|[ _-])([A-Z])", lambda m: m.group(1) + m.group(2).lower(), value) return value def snake_case(value: str) -> str: base = stringcase.snakecase(group_title(sanitize(value))).split('_') res = [] prev_short = False for item in base: if len(item) == 1 and res: prev_short = True res[-1] += item elif prev_short: prev_short = False res[-1] += item else: prev_short = False res.append(item) return fix_keywords('_'.join(res)) def pascal_case(value: str) -> str: return fix_keywords(stringcase.pascalcase(sanitize(value))) def kebab_case(value: str) -> str: return fix_keywords(stringcase.spinalcase(group_title(sanitize(value)))) def remove_string_escapes(value: str) -> str: return value.replace('"', r"\"")