← Назад к вопросам

Преобразование camelCase в snake_case

2.3 Middle🔥 191 комментариев
#Теория тестирования

Условие

Напишите функцию, которая преобразует строку из camelCase в snake_case.

Пример

Вход: myVariableName Выход: my_variable_name

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI23 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Решение

Анализ задачи

Необходимо преобразовать строку из camelCase в snake_case. Это часто встречается при работе с API, где названия полей приходят в camelCase (JavaScript/JSON), а нужно преобразовать их в snake_case (Python). Критично при автоматизации тестирования REST API.

Решение

import re

def camel_to_snake(camel_case_str: str) -> str:
    """Преобразует camelCase в snake_case."""
    if not isinstance(camel_case_str, str):
        raise TypeError("Входное значение должно быть строкой")
    if not camel_case_str:
        return ""
    
    snake_case = re.sub(r"([a-z])([A-Z])", r"\1_\2", camel_case_str)
    return snake_case.lower()


class StringConverter:
    @staticmethod
    def camel_to_snake_iterative(camel_case_str: str) -> str:
        """Преобразование через итерацию."""
        if not camel_case_str:
            return ""
        
        result = []
        for i, char in enumerate(camel_case_str):
            if char.isupper() and i > 0:
                result.append("_")
            result.append(char.lower())
        
        return "".join(result)
    
    @staticmethod
    def snake_to_camel(snake_case_str: str) -> str:
        """Обратное преобразование snake_case в camelCase."""
        if not snake_case_str:
            return ""
        
        parts = snake_case_str.split("_")
        return parts[0] + "".join(word.capitalize() for word in parts[1:])

Примеры использования

print(camel_to_snake("myVariableName"))        # my_variable_name
print(camel_to_snake("getUserByID"))           # get_user_by_id
print(StringConverter.camel_to_snake_iterative("myVariableName"))  # my_variable_name
print(StringConverter.snake_to_camel("my_variable_name"))  # myVariableName

Ключевые моменты

Подходы:

  • Регулярное выражение: O(n), встроенная оптимизация, компактно
  • Итеративный цикл: O(n), явный контроль, понятный код

Регулярное выражение:

  • ([a-z])([A-Z]) — ищет переход от нижней буквы к заглавной
  • r"\1_\2" — вставляет подчёркивание между группами

Граничные случаи:

  • Пустая строка
  • Один символ
  • Только заглавные буквы
  • Цифры в строке
  • Уже преобразованный snake_case
Преобразование camelCase в snake_case | PrepBro