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
→ Ссылка