Преобразование camel case в kebab case
Программа ставит перед большими буквами тире, это сделано, но интересует как вписать игнорирование попадающихся цифр в передаваемой строке.
def change_case(kebabize):
new = [kebabize[0].lower()]
for c in kebabize[1:]:
if c in ('ABCDEFGHIJKLMNOPQRSTUVWXYZ'):
new.append('-')
new.append(c.lower())
else:
new.append(c)
kebabize = ''.join(new)
return kebabize
print(change_case('myCamelHas3Humps')) # получается my-camel-has3-humps
# а мне надо чтоб было my-camel-has-humps т.е. чтоб программа игнорировала цифры и не писала их
Ответы (3 шт):
Автор решения: strawdog
→ Ссылка
Например, так:
a = "myCamelHas3Humps"
res = ''.join([f"-{x.lower()}" if x!= x.lower() else x for x in [y for y in a if y.upper() in 'ABCDEFGHIJKLMNOPQRSTUVWXYZ']])
res:
'my-camel-has-humps'
Автор решения: imitusov
→ Ссылка
Можно добавить доп. проверку на то, что символ строки является цифрой, при помощи метода .isdigit()
def change_case(kebabize):
new = []
for c in kebabize:
if c.isdigit(): # проеверка на цифру, если да, то пропускаем
continue
elif c in ('ABCDEFGHIJKLMNOPQRSTUVWXYZ'):
new.append('-')
new.append(c.lower())
else:
new.append(c)
kebabize = ''.join(new)
return kebabize
print(change_case('myCamelHas3Humps'))
Автор решения: Prospero2005
→ Ссылка
Скомпоновал из предложенного выше:
def change_case(kebabize):
new = [kebabize[0].lower() if kebabize[0].isalpha() else '']
for c in kebabize[1:]:
if c in ('ABCDEFGHIJKLMNOPQRSTUVWXYZ'):
new.append('-')
new.append(c.lower())
elif c.isalpha():
new.append(c)
kebabize = ''.join(new)
return kebabize
print(change_case('1myCamelHas3Humps')) # my-camel-has-humps
print(change_case('MyCamelHas3Humps')) # my-camel-has-humps
print(change_case('myCamelHas3Humps123')) # my-camel-has-humps
print(change_case('myCamelHas3Humps')) # my-camel-has-humps