Type or paste any string and instantly convert it to camelCase, PascalCase, snake_case, kebab-case, and more.
String case conversion in Python
import re
def to_snake_case(s: str) -> str:
s = re.sub(r'([A-Z]+)([A-Z][a-z])', r'\1_\2', s)
s = re.sub(r'([a-z\d])([A-Z])', r'\1_\2', s)
return s.replace('-', '_').replace(' ', '_').lower()
def to_camel_case(s: str) -> str:
parts = re.split(r'[\s_\-]+', s)
return parts[0].lower() + ''.join(w.capitalize() for w in parts[1:])
def to_pascal_case(s: str) -> str:
return ''.join(w.capitalize() for w in re.split(r'[\s_\-]+', s))
def to_kebab_case(s: str) -> str:
return to_snake_case(s).replace('_', '-')
print(to_snake_case("helloWorldFoo")) # hello_world_foo
print(to_camel_case("hello_world_foo")) # helloWorldFoo
print(to_pascal_case("hello-world")) # HelloWorld
print(to_kebab_case("MyClass")) # my-class
Why string case matters in Python
Python convention (PEP 8) uses snake_case for variables and functions, PascalCase for classes, and SCREAMING_SNAKE_CASE for constants. However, APIs often return camelCase JSON from JavaScript backends, requiring conversion when working with Pandas DataFrames or dataclasses. Libraries like pydantic support automatic alias generation between camelCase and snake_case, but understanding the underlying transformations is essential for debugging serialization issues and writing clean, idiomatic Python.