.Capitalize () işlevinin bir dizenin ilk harfini büyük yazdığını biliyorum, ama ya ilk karakter bir tamsayı ise?
bu
1bob
5sandy
buna
1Bob
5Sandy
.Capitalize () işlevinin bir dizenin ilk harfini büyük yazdığını biliyorum, ama ya ilk karakter bir tamsayı ise?
bu
1bob
5sandy
buna
1Bob
5Sandy
Yanıtlar:
İlk karakter bir tamsayı ise, ilk harfi büyük yazmaz.
>>> '2s'.capitalize()
'2s'
İşlevselliği istiyorsanız, basamakları ayırın, '2'.isdigit()
her karakteri kontrol etmek için kullanabilirsiniz .
>>> 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')
boş dize davası için çözer
. capitalize
ayrıca diğer karakterleri daha düşük seviyeye dönüştürür. Resmi dokümanlardan: "S'nin başlıklı bir sürümünü döndürün, yani kelimeler başlık harfleri ile başlar, kalan tüm kasa karakterleri küçük
Başka hiç kimse bundan bahsetmediği için:
>>> 'bob'.title()
'Bob'
>>> 'sandy'.title()
'Sandy'
>>> '1bob'.title()
'1Bob'
>>> '1sandy'.title()
'1Sandy'
Ancak, bu da
>>> '1bob sandy'.title()
'1Bob Sandy'
>>> '1JoeBob'.title()
'1Joebob'
yani sadece ilk alfabetik karakteri büyük harfle yazmaz. Ama sonra .capitalize()
aynı sorun var, en azından 'joe Bob'.capitalize() == 'Joe bob'
bunda, yani meh.
Bu, @ Anon'un cevabına benzer, çünkü dize kasasının geri kalanını re modülüne ihtiyaç duymadan sağlam tutar.
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
@Xan'ın işaret ettiği gibi, fonksiyon daha fazla hata kontrolü kullanabilir (x'in bir dizi olduğunu kontrol etmek gibi - ancak tekniği göstermek için uç durumları atlıyorum)
@Normanius yorumu başına güncellendi (teşekkürler!)
@GeoStoneMarten'a işaret ederek soruyu cevaplamadım! düzeltildi
len(x) == 0
şubeye ihtiyacı var .
return x[0].upper() + x[1:] if len(x) > 0 else x
capitalize
& title
ilk tam dizeyi küçük harfe ve sonra sadece ilk harfi büyük harfe.
a[:1].upper() + a[1:]
, bu len(X)==0
köşe kasasına dikkat edecektir .
İşte ilk harfi büyük olacak ve sonraki tüm harflerin durumunu bırakacak bir astar:
import re
key = 'wordsWithOtherUppercaseLetters'
key = re.sub('([a-zA-Z])', lambda x: x.groups()[0].upper(), key, 1)
print key
Bu, WordsWithOtherUppercaseLetters
bir astar: ' '.join(sub[:1].upper() + sub[1:] for sub in text.split(' '))