Estou ciente .capitalize () coloca em maiúscula a primeira letra de uma seqüência de caracteres, mas e se o primeiro caractere for um número inteiro?
isto
1bob
5sandy
para isso
1Bob
5Sandy
python
capitalize
letter
user1442957
fonte
fonte
next((i for i,e in enumerate(test) if not e.isdigit()), '0')
resolve-lo para o caso de string vazia. capitalize
também transformará outros caracteres para abaixar. De docs oficiais: "Return uma versão titlecased de S, palavras ou seja, início com caracteres em caixa título, todas as restantes personagens encaixotados têm minúsculas. "Somente porque ninguém mais o mencionou:
No entanto, isso também daria
ou seja, não apenas coloca em maiúscula o primeiro caractere alfabético. Mas então
.capitalize()
tem o mesmo problema, pelo menos nisso'joe Bob'.capitalize() == 'Joe bob'
, então meh.fonte
Isso é semelhante à resposta do @ Anon, pois mantém intacto o restante do caso da string, sem a necessidade do módulo re.
Como o @Xan apontou, a função poderia usar mais verificação de erros (como verificar se x é uma sequência - no entanto, estou omitindo casos extremos para ilustrar a técnica)
Atualizado por comentário @normanius (obrigado!)
Graças a @GeoStoneMarten ao apontar que não respondi à pergunta! -fixed that
fonte
len(x) == 0
ramo.return x[0].upper() + x[1:] if len(x) > 0 else x
capitalize
&title
primeiro minúscula a seqüência inteira e, em seguida, maiúscula apenas a primeira letra.a[:1].upper() + a[1:]
, isso cuidará da caixa delen(X)==0
canto.Aqui está uma linha que maiúscula a primeira letra e deixa o caso de todas as letras subseqüentes:
Isso resultará em
WordsWithOtherUppercaseLetters
fonte
Como visto aqui respondido por Chen Houwu, é possível usar o pacote de strings:
fonte
Eu vim com isso:
fonte
Você pode substituir a primeira letra (
preceded by a digit
) de cada palavra usando regex:fonte
uma linha:
' '.join(sub[:1].upper() + sub[1:] for sub in text.split(' '))
fonte