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
143
demandé sur smci 2012-09-13 19:54:32

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'
188
répondu Ali Afshar 2012-09-13 15:56:40

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.

202
répondu DSM 2012-09-13 16:18:06

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

32
répondu pinkwerks 2018-04-26 17:08:32

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

10
répondu Anon 2014-07-22 21:26:39

Comme Voir ici répondu par Chen Houwu, il est possible d'utiliser paquet chaîne de caractères:

import string
string.capwords("they're bill's friends from the UK")
>>>"They're Bill's Friends From The Uk"
2
répondu Fábio 2017-05-23 12:18:20

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
0
répondu Prasanth 2012-09-13 16:06:03

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
0
répondu WaKo 2016-11-16 11:25:33

une doublure unique: ' '.join(sub[:1].upper() + sub[1:] for sub in text.split(' '))

0
répondu Gürol Canbek 2018-08-29 21:19:52