2012-09-13 13 views

Répondre

164

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

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

Si vous voulez que la fonctionnalité, dévêtir 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

Je me demande comment tirer le premier caractère alpha – user1442957

+5

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

+12

j'utiliser si c.isalpha() plutôt que sinon c. isdigit() – njzk2

0

je suis venu avec 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

ne fonctionne pas s'il n'y a pas d'alpha –

174

Seulement parce que personne d'autre n'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' 

-à-dire il ne capitalise pas seulement le premier alphabet c caractère. Mais alors .capitalize() a le même problème, au moins dans ce 'joe Bob'.capitalize() == 'Joe bob', donc meh.

9

Voici une seule ligne qui majuscule la première lettre et laisser 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 

Cela se traduira par WordsWithOtherUppercaseLetters

29

Ceci est similaire à @ réponse de Anon dans ce il garde intact le reste de la chaîne, sans avoir besoin du module re.

def upperfirst(x): 
    return x[0].upper() + x[1:] 

x = 'thisIsCamelCase' 

y = upperfirst(x) 

print(y) 

# Result: 'ThisIsCamelCase' # 

Comme @Xan a souligné, la fonction pourrait utiliser plus de contrôle d'erreurs (par exemple vérifier que x est une séquence - mais je suis en omettant les cas de pointe pour illustrer la technique)

+2

Très utile, mais nécessite un 'len (x) == 0' branche. – Xan

+0

depuis python 2.5 le cas vide peut encore être traité sur une ligne: 'return x [0] .upper() + x [1:] si len (x)> 0 sinon x' – danio

+0

Réponse très utile, car' capitaliser '&' title' d'abord en minuscule la chaîne entière et ensuite en majuscules seulement la première lettre. –

0

Vous pouvez remplacer le 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

Comme vu here répondu par Chen Houwu, il est possible d'utiliser paquet chaîne:

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

un one-liner: ' '.join(token_text[:1].upper() + token_text[1:] for sub in text.split(' '))

Questions connexes