Apakah ada cara standar dalam Python untuk titlecase string (yaitu kata-kata mulai dengan karakter huruf besar, semua karakter cased tersisa memiliki huruf kecil) tetapi meninggalkan artikel seperti and
, in
, dan of
lowercased?
python
string
title-case
yassin
sumber
sumber
re
perlu? Ada"".split
fungsi yang melakukan hal yang sama.str.split
tidak mempertimbangkan spasi yang bersebelahan.re.split
mempertahankan ruang. Jadi, fungsi ini tidak memakan tempat."".split()
tidak mempertimbangkan mereka tetapi"".split(" ")
melakukannya.title_except('a whim of aN elephant', articles)
kasus. Anda dapat menggunakanword.lower() in exceptions
kondisi pemfilteran untuk memperbaikinya.2001 a Space Odyssey
harus kembali2001 A Space Odyssey
, di manaa
dikapitalisasi seperti mengikuti angka. Terima kasih sebelumnya.Gunakan modul titlecase.py ! Bekerja hanya untuk bahasa Inggris.
>>> from titlecase import titlecase >>> titlecase('i am a foobar bazbar') 'I Am a Foobar Bazbar'
GitHub: https://github.com/ppannuto/python-titlecase
sumber
Ada beberapa metode ini:
>>> mytext = u'i am a foobar bazbar' >>> print mytext.capitalize() I am a foobar bazbar >>> print mytext.title() I Am A Foobar Bazbar
Tidak ada opsi artikel huruf kecil. Anda harus mengkodekannya sendiri, mungkin dengan menggunakan daftar artikel yang ingin Anda turunkan.
sumber
Stuart Colville telah membuat port Python dari skrip Perl yang ditulis oleh John Gruber untuk mengubah string menjadi kapitalisasi judul, tetapi menghindari penggunaan huruf kecil berdasarkan aturan gaya New York Times Manual, serta melayani beberapa kasus khusus.
Beberapa kepintaran dari skrip ini:
mereka menggunakan huruf besar untuk kata-kata kecil seperti if, in, of, on , dll., tetapi akan menghapus penggunaan huruf besar jika salah kapitalisasi dalam input.
skrip mengasumsikan bahwa kata-kata dengan huruf kapital selain karakter pertama sudah menggunakan huruf besar dengan benar. Ini berarti mereka akan meninggalkan kata seperti "iTunes" saja, daripada mengacaukannya menjadi "ITunes" atau, lebih buruk, "Itunes".
mereka melewatkan kata apa pun dengan titik-titik garis; "Example.com" dan "del.icio.us" akan tetap menggunakan huruf kecil.
mereka memiliki kode keras peretasan khusus untuk menangani kasus-kasus aneh, seperti “AT&T” dan “Q&A”, keduanya berisi kata-kata kecil (at dan a) yang biasanya harus huruf kecil.
Kata pertama dan terakhir dari judul selalu menggunakan huruf besar, sehingga masukan seperti “Tidak ada yang perlu ditakuti” akan diubah menjadi “Tidak Ada yang Perlu Ditakuti”.
Kata kecil setelah titik dua akan menggunakan huruf besar.
Anda bisa mendownloadnya disini .
sumber
Ini harus dilakukan. Saya mendapatkannya secara berbeda.
>>> mytext = u'i am a foobar bazbar' >>> mytext.capitalize() u'I am a foobar bazbar' >>>
Ok seperti yg dibilang di atas, anda harus membuat custom kapitalisasi:
mytext = u'i am a foobar bazbar '
def xcaptilize(word): skipList = ['a', 'an', 'the', 'am'] if word not in skipList: return word.capitalize() return word k = mytext.split(" ") l = map(xcaptilize, k) print " ".join(l)
Output ini
sumber
Metode judul Python 2.7 memiliki kekurangan di dalamnya.
akan kembali Carpenter ' S Asisten ketika nilai adalah Carpenter' s Asisten
Solusi terbaik mungkin adalah dari @BioGeek menggunakan titlecase dari Stuart Colville. Solusi mana yang sama yang dikemukakan oleh @Etienne.
sumber
not_these = ['a','the', 'of'] thestring = 'the secret of a disappointed programmer' print ' '.join(word if word in not_these else word.title() for word in thestring.capitalize().split(' ')) """Output: The Secret of a Disappointed Programmer """
Judul dimulai dengan kata kapital dan tidak sesuai dengan artikel.
sumber
One-liner menggunakan pemahaman daftar dan operator terner
reslt = " ".join([word.title() if word not in "the a on in of an" else word for word in "Wow, a python one liner for titles".split(" ")]) print(reslt)
Kerusakan:
for word in "Wow, a python one liner for titles".split(" ")
Memisahkan string menjadi daftar dan memulai perulangan for (dalam pemahaman daftar)word.title() if word not in "the a on in of an" else word
menggunakan metode aslititle()
untuk memberi judul case string jika itu bukan artikel" ".join
menggabungkan elemen daftar dengan pemisah (spasi)sumber
Satu kasus penting yang tidak dipertimbangkan adalah akronim (solusi python-titlecase dapat menangani akronim jika Anda secara eksplisit memberikannya sebagai pengecualian). Saya lebih suka menghindari down-casing. Dengan pendekatan ini, akronim yang sudah dalam huruf besar tetap menggunakan huruf besar. Kode berikut adalah modifikasi dari yang aslinya disediakan oleh dheerosaur.
# This is an attempt to provide an alternative to ''.title() that works with # acronyms. # There are several tricky cases to worry about in typical order of importance: # 0. Upper case first letter of each word that is not an 'minor' word. # 1. Always upper case first word. # 2. Do not down case acronyms # 3. Quotes # 4. Hyphenated words: drive-in # 5. Titles within titles: 2001 A Space Odyssey # 6. Maintain leading spacing # 7. Maintain given spacing: This is a test. This is only a test. # The following code addresses 0-3 & 7. It was felt that addressing the others # would add considerable complexity. def titlecase( s, exceptions = ( 'and', 'or', 'nor', 'but', 'a', 'an', 'and', 'the', 'as', 'at', 'by', 'for', 'in', 'of', 'on', 'per', 'to' ) ): words = s.strip().split(' ') # split on single space to maintain word spacing # remove leading and trailing spaces -- needed for first word casing def upper(s): if s: if s[0] in '‘“"‛‟' + "'": return s[0] + upper(s[1:]) return s[0].upper() + s[1:] return '' # always capitalize the first word first = upper(words[0]) return ' '.join([first] + [ word if word.lower() in exceptions else upper(word) for word in words[1:] ]) cases = ''' CDC warns about "aggressive" rats as coronavirus shuts down restaurants L.A. County opens churches, stores, pools, drive-in theaters UConn senior accused of killing two men was looking for young woman Giant asteroid that killed the dinosaurs slammed into Earth at ‘deadliest possible angle,’ study reveals Maintain given spacing: This is a test. This is only a test. '''.strip().splitlines() for case in cases: print(titlecase(case))
Saat dijalankan, ini menghasilkan yang berikut:
CDC Warns About "Aggressive" Rats as Coronavirus Shuts Down Restaurants L.A. County Opens Churches, Stores, Pools, Drive-in Theaters UConn Senior Accused of Killing Two Men Was Looking for Young Woman Giant Asteroid That Killed the Dinosaurs Slammed Into Earth at ‘Deadliest Possible Angle,’ Study Reveals Maintain Given Spacing: This Is a Test. This Is Only a Test.
sumber