Замена верхнего регистра нижним

Задача:

Вставьте символа нижнего подчеркивания перед заглавной буквой следующего слова. Если первая буква написана с большой буквы, преобразуйте ее в нижний регистр и не забудьте вставить перед ней символ подчеркивания.

Мой код, который пишет "_" перед заглавной буквой:

import re
def snake_case(text):
    return(re.sub(r"([A-Z])", "_\\1", text))
text = input()
print(snake_case(text))

Я не знаю, куда мне вставить lower(). Пробовала в print, но какая-то ерунда получается...?

P.S. Цикл For не хочу. Хочу через регулярки)))


Ответы (2 шт):

Автор решения: CrazyElf

Можно с помощью lambda такое делать:

return(re.sub(r"([A-Z])", lambda m: '_' + m.group(0).lower(), text))

В других языках вообще есть для этого специальные escape-последовательности в регулярках, но в питоне это не работает или я просто не знаю как туда \L применить.

→ Ссылка
Автор решения: Вика Мельникова

@GrAnd , крч, я не поняла про \b, но 2 дня потратила на то, чтоб написать вот это. Не знаю как, но оно работает и мне засчитали задачу:

import re  
def snake_case(text):
    string = re.sub(r'(.)([A-Z][a-z]+)', r'\1_\2', text)
    return(re.sub(r'([a-z])([A-Z])', r'\1_\2', string).lower() )    
text = input()
print(snake_case(text))
→ Ссылка