2012-09-13 17 views

risposta

164

Se il primo carattere è un numero intero, non sarà la prima maiuscola.

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

Se si desidera che la funzionalità, spogliano le cifre, è possibile utilizzare '2'.isdigit() per controllare per ogni personaggio.

>>> s = '123sa' 
>>> for i, c in enumerate(s): 
...  if not c.isdigit(): 
...   break 
... 
>>> s[:i] + s[i:].capitalize() 
'123Sa' 
+0

chiedo come capitalizzare il primo carattere alfabetico – user1442957

+5

e questo è ciò che questa risposta fa, più o meno – njzk2

+12

userei se c.isalpha() piuttosto che se non c. isdigit() – njzk2

0

sono arrivato fino a questo:

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

non funziona se non c'è alpha –

174

solo perché nessun altro ha parlato:

>>> 'bob'.title() 
'Bob' 
>>> 'sandy'.title() 
'Sandy' 
>>> '1bob'.title() 
'1Bob' 
>>> '1sandy'.title() 
'1Sandy' 

Tuttavia, questo sarebbe anche dare

>>> '1bob sandy'.title() 
'1Bob Sandy' 
>>> '1JoeBob'.title() 
'1Joebob' 

vale a dire non capitalizza solo il primo alphabeti c carattere. Ma poi lo .capitalize() ha lo stesso problema, almeno in quello 'joe Bob'.capitalize() == 'Joe bob', quindi meh.

9

Ecco una battuta che in maiuscolo la prima lettera e lasciare il caso di tutte le lettere successive:

import re 

key = 'wordsWithOtherUppercaseLetters' 
key = re.sub('([a-zA-Z])', lambda x: x.groups()[0].upper(), key, 1) 
print key 

Questo si tradurrà in WordsWithOtherUppercaseLetters

29

Questo è simile a @ risposta di Anon in quel mantiene intatto il resto del caso della stringa, senza la necessità del modulo re.

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

x = 'thisIsCamelCase' 

y = upperfirst(x) 

print(y) 

# Result: 'ThisIsCamelCase' # 

Come @Xan ha sottolineato, la funzione potrebbe usare più controllo degli errori (ad esempio controllando che x è una sequenza - tuttavia sto omettendo casi limite per illustrare la tecnica)

+2

Molto utile, ma ha bisogno di un 'len (x) == 0' branch. – Xan

+0

da python 2.5 il caso vuoto può ancora essere gestito su una riga: 'return x [0] .upper() + x [1:] se len (x)> 0 else x' – danio

+0

Risposta molto utile, perché' capitalizza '&' title' prima mette in minuscolo l'intera stringa e poi in maiuscolo solo la prima lettera. –

0

È possibile sostituire la prima lettera (preceded by a digit) di ogni parola usando espressioni regolari:

re.sub(r'(\d\w)', lambda w: w.group().upper(), '1bob 5sandy') 

output: 
1Bob 5Sandy 
0

come vedere here risposta da Chen Houwu, è possibile utilizzare set di corde:

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

una battuta: ' '.join(token_text[:1].upper() + token_text[1:] for sub in text.split(' '))

Problemi correlati