Как добавить дефис к заглавным буквам

Рейтинг: 0Ответов: 2Опубликовано: 09.03.2023

Допустим у меня есть строка, к примеру 'Hello World My Name Is John'

Мне нужно преобразовать её во что то подобное 'hello-world-my-name-is-john.

Я пробовал string.replace(' ', '-').lower(), но проблема в том, что строка может быть подобной этой 'HellloWorldMyNameIsJohn', и тогда программа не работает.

Ответы

▲ 0Принят

Вариант решения через регулярные выражения. Заменяем все заглавные буквы, кроме начальной, на дефис + строчную букву. Пробелы перед словами, начинающимися с заглавных букв, не захватываем, поэтому они удаляются. Для замены используется лямбда, которая возвращает дефис + захваченную группу, переведенную в нижний регистр.

text = 'Hello World My Name Is John HellloWorldMyNameIsJohn'
text = re.sub(r'(?<!^)\s*([A-ZА-ЯЁ])', lambda x: '-' + x[1].lower(), text)
print(text)
Hello-world-my-name-is-john-helllo-world-my-name-is-john
▲ 1

Алгоритм в лоб: перебирать буквы по одной, если буква строчная, то присоединять ее к итоговой строке (в новой переменной), если же буква заглавна, то вместе с ней присоединить и дефис.