Last active
November 29, 2024 13:42
-
-
Save pmeier/0e8459f8a5ad7ce5395fff8c73c66b7d to your computer and use it in GitHub Desktop.
Convert any* string to kebab-case or snake_case
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import re | |
def delimited_case(s: str, *, delimiter: str) -> str: | |
return re.sub( | |
r"(([a-z0-9])(?=[A-Z][a-zA-Z0-9])|([A-Z0-9])(?=[A-Z0-9][a-z]))", | |
rf"\1{delimiter}", | |
re.sub(r"[^a-zA-Z0-9]+", delimiter, s), | |
) | |
def kebab_case(s: str) -> str: | |
return delimited_case(s, delimiter="-").lower() | |
def snake_case(s: str) -> str: | |
return delimited_case(s, delimiter="_").lower() | |
def screaming_case(s: str) -> str: | |
return delimited_case(s, delimiter="_").upper() | |
print("| `s` | `kebab_case(s)` | `screaming_case(s)` |") | |
print("|-----|-----------------|-----------------|") | |
for s in [ | |
"kebab-case", | |
"snake_case", | |
"PascalCase", | |
"PascalCaseWithURL", | |
"PascalCaseWithURLInTheMiddle", | |
"camelCase", | |
"camelCaseWithS3Bucket", | |
"separate words with S3Bucket", | |
"Really_weird-mixOfDifferent.cases", | |
]: | |
print(f"| {s} | {kebab_case(s)} | {screaming_case(s)} |") |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
s
kebab_case(s)
screaming_case(s)