Saya sadar .capitalize () mengkapitalisasi huruf pertama dari string tetapi bagaimana jika karakter pertama adalah bilangan bulat?
ini
1bob
5sandy
untuk ini
1Bob
5Sandy
Saya sadar .capitalize () mengkapitalisasi huruf pertama dari string tetapi bagaimana jika karakter pertama adalah bilangan bulat?
ini
1bob
5sandy
untuk ini
1Bob
5Sandy
Jawaban:
Jika karakter pertama adalah bilangan bulat, itu tidak akan menjadi huruf kapital huruf pertama.
>>> '2s'.capitalize()
'2s'
Jika Anda menginginkan fungsionalitas, lepas digit, Anda dapat menggunakannya '2'.isdigit()
untuk memeriksa setiap karakter.
>>> s = '123sa'
>>> for i, c in enumerate(s):
... if not c.isdigit():
... break
...
>>> s[:i] + s[i:].capitalize()
'123Sa'
next((i for i,e in enumerate(test) if not e.isdigit()), '0')
menyelesaikannya untuk kasus string kosong
. capitalize
juga akan mengubah karakter lainnya menjadi lebih rendah. Dari dokumen resmi: "Kembalikan versi titlecased S, yaitu kata-kata mulai dengan karakter case judul, semua karakter cased yang tersisa memiliki huruf kecil. "
Hanya karena tidak ada orang lain yang menyebutkannya:
>>> 'bob'.title()
'Bob'
>>> 'sandy'.title()
'Sandy'
>>> '1bob'.title()
'1Bob'
>>> '1sandy'.title()
'1Sandy'
Namun, ini juga akan memberi
>>> '1bob sandy'.title()
'1Bob Sandy'
>>> '1JoeBob'.title()
'1Joebob'
yaitu tidak hanya menggunakan huruf besar karakter alfabet pertama. Tetapi kemudian .capitalize()
memiliki masalah yang sama, setidaknya dalam hal itu 'joe Bob'.capitalize() == 'Joe bob'
, jadi meh.
Ini mirip dengan jawaban @ Anon karena ini menjaga sisa case string tetap utuh, tanpa perlu modul 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
Seperti yang ditunjukkan oleh @Xan, fungsi tersebut dapat menggunakan lebih banyak pengecekan kesalahan (seperti memeriksa bahwa x adalah suatu urutan - namun saya menghilangkan kasus tepi untuk menggambarkan teknik ini)
Diperbarui per komentar @normanius (terima kasih!)
Terima kasih kepada @GeoStoneMarten dalam menunjukkan bahwa saya tidak menjawab pertanyaan! -memperbaiki itu
len(x) == 0
cabang.
return x[0].upper() + x[1:] if len(x) > 0 else x
capitalize
& title
pertama mengurung seluruh string dan kemudian hanya menggunakan huruf pertama.
a[:1].upper() + a[1:]
, ini akan menangani len(X)==0
kasus sudut.
Berikut ini adalah satu-liner yang akan huruf besar huruf pertama dan meninggalkan huruf semua huruf berikutnya:
import re
key = 'wordsWithOtherUppercaseLetters'
key = re.sub('([a-zA-Z])', lambda x: x.groups()[0].upper(), key, 1)
print key
Ini akan menghasilkan WordsWithOtherUppercaseLetters