Convert string to camel case codewars
Прохожу задания в Codewars и появилась проблема в этом коде
def to_camel_case(text):
l = list(text)
for i in l:
if i == '_' or i == '-':
l.remove(i)
text = ''.join(l)
elif len(text) == 0:
return text
return text
По условию задачи нужно убрать все знаки - и _, а после них буква должна быть заглавной. Основную задачу выполнил, но вот как сделать буквы заглавными не знаю как.
Ответы (5 шт):
Автор решения: becouse
→ Ссылка
Вот пример. Мы смотрим на пару рядом стоящих символов. Если она соответствует _буква, то меняем на заглавную.
def to_camel_case(text):
l = list(text)
res=[]
i=0
while i< len(text)-1:
if (l[i] in ['_','-']):
if l[i+1] not in ['_','-']:
res.append(l[i+1].upper())
i=i+2
else:
res.append(l[i])
i=i+1
return ''.join(res)
Автор решения: Юлиан
→ Ссылка
Проходим по всем символам, если нашли - или _ - удаляем его, и, если следующий за - или _ символ - буква, приводим к её верхнему регистру.
def to_camel_case(text):
text_arr = list(text)
i = 0
while i < len(text_arr):
if text_arr[i] == '-' or text_arr[i] == '_':
del text_arr[i]
if i != len(text_arr) - 1 and text_arr[i].isalpha():
text_arr[i] = text_arr[i].upper()
i += 1
else:
i += 1
return ''.join(text_arr)
Автор решения: Jazzis
→ Ссылка
Заменяем - и _ на пробелы, капитализируем каждое слово, убираем пробелы.
def to_camel_case(text):
return text.replace('-',' ').replace('_',' ').title().replace(' ','')
Автор решения: Wairua
→ Ссылка
import re
a = 'hjshf-df45_fsdf-fgbcn-puiouio'
print(''.join(map(str.capitalize, re.findall(r'[^-_]+', a))))
# HjshfDf45FsdfFgbcnPuiouio
Автор решения: gil9red
→ Ссылка
Регуляркой ищем пары из - / _ с любым символом после них и заменяем их на символ в верхнем регистре:
- re.sub — это функция для замены строки на другую строку, аналог
str.replace [-_]— ожидается один из символов:-или_(.)— точка.означает любой символ, а круглые скобки()нужны для захвата символа, чтобы получить его через.group()
Пример:
import re
text = 'hjshf-df45_fsdf-fgbcn-puiouio'
print(text)
new_text = re.sub(r'[-_](.)', lambda m: m.group(1).upper(), text)
print(new_text)
# hjshfDf45FsdfFgbcnPuiouio