Jestem świadomy .capitalize() kapitalizuje pierwszą literę ciągu, ale co, jeśli pierwszy znak jest liczbą całkowitą?python wymień tylko pierwszą literę
to
1bob
5sandy
do tego
1Bob
5Sandy
Jestem świadomy .capitalize() kapitalizuje pierwszą literę ciągu, ale co, jeśli pierwszy znak jest liczbą całkowitą?python wymień tylko pierwszą literę
to
1bob
5sandy
do tego
1Bob
5Sandy
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'
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
nie działają, jeśli nie ma alfa –
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.
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
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)
Bardzo przydatne, ale wymaga 'len (x) == 0' oddział. – Xan
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
Bardzo przydatna odpowiedź, ponieważ' capitalize '&' title' najpierw małe litery cały ciąg, a następnie wielkie litery tylko pierwsza litera. –
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
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"
one-liner: ' '.join(token_text[:1].upper() + token_text[1:] for sub in text.split(' '))
Pytam, jak wykorzystać pierwszy alfa charakter – user1442957
i że to, co robi ta odpowiedź, prawie – njzk2
chciałbym użyć, jeśli c.isalpha (nie) zamiast jeśli c. isdigit() – njzk2