Python majuscule première lettre seulement
je suis au courant .capitaliser () capitalise la première lettre d'une chaîne de caractères, mais que faire si le premier caractère est un entier?
ce
1bob
5sandy
à ce
1Bob
5Sandy
8 réponses
si le premier caractère est un entier, il ne capitalisera pas la première lettre.
>>> '2s'.capitalize()
'2s'
si vous voulez la fonctionnalité, rayer 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'
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 aussi
>>> '1bob sandy'.title()
'1Bob Sandy'
>>> '1JoeBob'.title()
'1Joebob'
i.e. il ne se contente pas de capitaliser le premier caractère alphabétique. Mais alors .capitalize()
a la même question, au moins dans ce 'joe Bob'.capitalize() == 'Joe bob'
, donc meh.
c'est similaire à la réponse de @Anon en ce sens qu'elle garde le reste du corps de la chaîne intact, 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 d'erreur (comme vérifier que x est une séquence - cependant je Omets les cas de bord pour illustrer la technique)
mise à Jour par @normanius commentaire (merci!)
merci à @GeoStoneMarten en soulignant que je n'ai pas répondez à la question! - fixé que
Voici une doublure qui mettra en majuscule la première lettre et laissera le cas 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
il en résultera WordsWithOtherUppercaseLetters
j'ai trouvé ceci:
import re
regex = re.compile("[A-Za-z]") # find a alpha
str = "1st str"
s = regex.search(str).group() # find the first alpha
str = str.replace(s, s.upper(), 1) # replace only 1 instance
print str
vous pouvez remplacer la première lettre ( preceded by a digit
) de chaque mot en utilisant regex:
re.sub(r'(\d\w)', lambda w: w.group().upper(), '1bob 5sandy')
output:
1Bob 5Sandy
une doublure unique: ' '.join(sub[:1].upper() + sub[1:] for sub in text.split(' '))