209 votes

python majuscule seulement la première lettre

Je sais que .capitalize() met en majuscule la première lettre d'une chaîne de caractères, mais qu'en est-il si le premier caractère est un nombre entier ?

ce

1bob
5sandy

à ce

1Bob
5Sandy

283voto

DSM Points 71975

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 se contente pas de mettre en majuscule le premier caractère alphabétique. Mais alors .capitalize() a le même problème, au moins dans la mesure où 'joe Bob'.capitalize() == 'Joe bob' alors meh.

254voto

Ali Afshar Points 22836

Si le premier caractère est un nombre entier, la première lettre ne sera pas mise en majuscule.

>>> '2s'.capitalize()
'2s'

Si vous voulez la fonctionnalité, sans 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'

0 votes

Je demande comment mettre en majuscule le premier caractère alphabétique.

5 votes

Et c'est ce que fait cette réponse, à peu près

17 votes

J'utiliserais if c.isalpha() plutôt que if not c.isdigit()

40voto

pinkwerks Points 556

Cette solution est similaire à la réponse de @Anon dans la mesure où elle permet de conserver le reste de la casse de la chaîne intacte, sans avoir recours au 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 fait remarquer, la fonction pourrait utiliser davantage de contrôles d'erreurs (par exemple, vérifier que x est une séquence - cependant, j'omets les cas limites pour illustrer la technique).

Mis à jour par le commentaire de @normanius (merci !)

Merci à @GeoStoneMarten de m'avoir fait remarquer que je n'avais pas répondu à la question ! -J'ai corrigé cela

17voto

Anon Points 11

Voici une phrase qui met en majuscule la première lettre et laisse 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 se traduira par WordsWithOtherUppercaseLetters

4voto

Fábio Points 528

En voyant aquí répondu par Chen Houwu, il est possible d'utiliser le paquet de chaînes :

import string
string.capwords("they're bill's friends from the UK")
>>>"They're Bill's Friends From The Uk"

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X