2012-09-13 10 views

Odpowiedz

164

Jeśli pierwszy znak jest liczbą całkowitą, to nie będzie wielką literą.

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

Jeśli chcesz funkcjonalność, zdejmować cyfry można użyć '2'.isdigit() sprawdzić dla każdego znaku.

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

Pytam, jak wykorzystać pierwszy alfa charakter – user1442957

+5

i że to, co robi ta odpowiedź, prawie – njzk2

+12

chciałbym użyć, jeśli c.isalpha (nie) zamiast jeśli c. isdigit() – njzk2

0

wymyśliłem to:

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

nie działają, jeśli nie ma alfa –

174

Tylko dlatego, że nikt inny nie wspomniał:

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

Jednak to również dać

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

tj nie tylko kapitalizuje pierwsze alfabetyczne c znak. Ale wtedy .capitalize() ma ten sam problem, przynajmniej w tym 'joe Bob'.capitalize() == 'Joe bob', więc meh.

9

Oto jeden-liner, które będą wielkie litery pierwszej litery i zostawić przypadku wszystkich kolejnych liter:

import re 

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

To spowoduje WordsWithOtherUppercaseLetters

29

Jest to podobne do @ odpowiedź Anon w które pozostawia nienaruszoną pozostałą część sznurka, bez potrzeby stosowania modułu re.

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

x = 'thisIsCamelCase' 

y = upperfirst(x) 

print(y) 

# Result: 'ThisIsCamelCase' # 

Jak @Xan wskazał, funkcja może korzystać więcej sprawdzanie błędów (takich jak sprawdzenie, że X jest sekwencją - jednak jestem pomijając przypadki brzegowe do zilustrowania techniki)

+2

Bardzo przydatne, ale wymaga 'len (x) == 0' oddział. – Xan

+0

od wersji Pythona 2.5, pusta skrzynka nadal może być obsługiwana w jednym wierszu: 'return x [0] .upper() + x [1:] if len (x)> 0 else x' – danio

+0

Bardzo przydatna odpowiedź, ponieważ' capitalize '&' title' najpierw małe litery cały ciąg, a następnie wielkie litery tylko pierwsza litera. –

0

można zastąpić pierwsza litera (preceded by a digit) każdego słowa za pomocą wyrażenia regularnego:

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

output: 
1Bob 5Sandy 
0

Jak widząc here odpowiedział Chen Houwu, możliwe jest użycie pakietu wyrażenie:

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

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

Powiązane problemy