close
 1import re
 2
 3
 4def camelcase_to_title(name: str) -> str:
 5    """Convert CamelCase to a readable title.
 6
 7    Examples:
 8        User -> User
 9        ThisThing -> This thing
10        URLParser -> URL parser
11    """
12    # Insert space before:
13    # - capitals that follow lowercase letters or digits
14    # - a capital followed by lowercase (for acronyms like URLParser)
15    # - digits that follow letters
16    result = re.sub(
17        r"(?<=[a-z0-9])(?=[A-Z])|(?<=[A-Z])(?=[A-Z][a-z])|(?<=[a-zA-Z])(?=[0-9])",
18        " ",
19        name,
20    )
21    # Capitalize first letter, lowercase the rest of each word except acronyms
22    words = result.split()
23    if not words:
24        return name
25    # First word: capitalize first letter
26    # Remaining words: lowercase unless all caps (acronym)
27    processed = [words[0]]
28    for word in words[1:]:
29        if word.isupper() and len(word) > 1:
30            processed.append(word)  # Keep acronyms uppercase
31        else:
32            processed.append(word.lower())
33    return " ".join(processed)