Замена верхнего регистра нижним
Задача:
Вставьте символа нижнего подчеркивания перед заглавной буквой следующего слова. Если первая буква написана с большой буквы, преобразуйте ее в нижний регистр и не забудьте вставить перед ней символ подчеркивания.
Мой код, который пишет "_" перед заглавной буквой:
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 шт):
Можно с помощью 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))