Bir dizedeki her kelimenin ilk harfi nasıl büyük yazılır?
s = 'the brown fox'
...burada bir şeyler yap...
s
olmalıdır:
'The Brown Fox'
Bunu yapmanın en kolay yolu nedir?
526
3
s = 'the brown fox'
...burada bir şeyler yap...
s
olmalıdır:
'The Brown Fox'
Bunu yapmanın en kolay yolu nedir?
Bir dizenin
.title()
yöntemi (ASCII veya Unicode olması fark etmez) bunu yapar:Ancak, dokümanlarda belirtildiği gibi gömülü kesme işaretleri içeren dizelere dikkat edin.
Algoritma, bir kelimenin ardışık harf grupları olarak dilden bağımsız basit bir tanımını kullanır. Bu tanım birçok bağlamda işe yarar ancak bu, kısaltmalar ve iyeliklerdeki kesme işaretlerinin kelime sınırları oluşturduğu anlamına gelir ve bu istenen sonuç olmayabilir:
Sırf bu tür şeyler benim için eğlenceli olduğu için, işte iki çözüm daha.
Kelimelere bölün, bölünen gruplardaki her kelimeyi ilk harfleriyle yazın ve yeniden birleştirin. Bu, kelimeleri ayıran beyaz boşluğu, ne olursa olsun tek bir beyaz boşluğa dönüştürecektir.
EDIT: Yukarıdaki kodu yazarken ne düşündüğümü hatırlamıyorum, ancak açık bir liste oluşturmaya gerek yok; bunu tembel bir şekilde yapmak için bir jeneratör ifadesi kullanabiliriz. İşte daha iyi bir çözüm:
Dizenin başlangıcını veya sözcükleri ayıran beyaz boşluğu ve beyaz boşluk olmayan tek bir karakteri eşleştirmek için normal ifade kullanın; "match groups" işaretlemek için parantez kullanın. Bir eşleşme nesnesi alan ve beyaz boşluk eşleşme grubunu değiştirmeden ve beyaz boşluk olmayan karakter eşleşme grubunu büyük harf olarak döndüren bir fonksiyon yazın. Ardından kalıpları değiştirmek için
re.sub()
işlevini kullanın. Bu çözümde ne ilk çözümdeki noktalama işaretleri sorunları var ne de ilk çözümümdeki gibi beyaz boşluğu yeniden yapıyor. Bu en iyi sonucu üretir.Bu cevabı araştırdığım için memnunum. re.sub()
ın bir fonksiyon alabileceği hakkında hiçbir fikrim yoktu! Nihai sonucu üretmek için
re.sub()` içinde önemsiz işlemler yapabilirsiniz!Eğer str.title() sizin için çalışmazsa, büyük harf kullanımını kendiniz yapın.
Tek satırlık:
Açık bir örnek: