Je sais que .capitalize () met en majuscule la première lettre d'une chaîne, mais que faire si le premier caractère est un entier?
ce
1bob
5sandy
pour ça
1Bob
5Sandy
Je sais que .capitalize () met en majuscule la première lettre d'une chaîne, mais que faire si le premier caractère est un entier?
ce
1bob
5sandy
pour ça
1Bob
5Sandy
Réponses:
Si le premier caractère est un entier, il ne mettra pas la première lettre en majuscule.
>>> '2s'.capitalize()
'2s'
Si vous voulez la fonctionnalité, supprimez les chiffres, vous pouvez utiliser '2'.isdigit()
pour vérifier chaque caractère.
>>> s = '123sa'
>>> for i, c in enumerate(s):
... if not c.isdigit():
... break
...
>>> s[:i] + s[i:].capitalize()
'123Sa'
next((i for i,e in enumerate(test) if not e.isdigit()), '0')
résout pour la casse de la chaîne vide
. capitalize
transformera également d'autres caractères en caractères inférieurs. Extrait de la documentation officielle: "Renvoie une version titrée de S, c'est-à-dire que les mots commencent par les caractères de la casse du titre, tous les caractères restants sont en minuscules. "
Seulement parce que personne d'autre ne l'a mentionné:
>>> 'bob'.title()
'Bob'
>>> 'sandy'.title()
'Sandy'
>>> '1bob'.title()
'1Bob'
>>> '1sandy'.title()
'1Sandy'
Cependant, cela donnerait également
>>> '1bob sandy'.title()
'1Bob Sandy'
>>> '1JoeBob'.title()
'1Joebob'
c'est-à-dire qu'il ne met pas seulement en majuscule le premier caractère alphabétique. Mais alors .capitalize()
a le même problème, au moins en cela 'joe Bob'.capitalize() == 'Joe bob'
, alors meh.
Ceci est similaire à la réponse de @ Anon en ce sens qu'il garde le reste de la casse de la chaîne intacte, sans avoir besoin du module re.
def sliceindex(x):
i = 0
for c in x:
if c.isalpha():
i = i + 1
return i
i = i + 1
def upperfirst(x):
i = sliceindex(x)
return x[:i].upper() + x[i:]
x = '0thisIsCamelCase'
y = upperfirst(x)
print(y)
# 0ThisIsCamelCase
Comme @Xan l'a souligné, la fonction pourrait utiliser plus de vérification des erreurs (comme vérifier que x est une séquence - mais j'omets les cas de bord pour illustrer la technique)
Mis à jour par commentaire @normanius (merci!)
Merci à @GeoStoneMarten d'avoir fait remarquer que je n'ai pas répondu à la question! -fixé ça
len(x) == 0
branche.
return x[0].upper() + x[1:] if len(x) > 0 else x
capitalize
& d' title
abord minuscule la chaîne entière, puis majuscule seulement la première lettre.
a[:1].upper() + a[1:]
, cela prendra soin de la len(X)==0
valise d'angle.
Voici une ligne unique qui mettra en majuscule la première lettre et laissera la casse de toutes les lettres suivantes:
import re
key = 'wordsWithOtherUppercaseLetters'
key = re.sub('([a-zA-Z])', lambda x: x.groups()[0].upper(), key, 1)
print key
Cela entraînera WordsWithOtherUppercaseLetters
un monoplace: ' '.join(sub[:1].upper() + sub[1:] for sub in text.split(' '))