Contoh:
HILO -> Hilo
new york -> New York
SAN FRANCISCO -> San Francisco
Apakah ada pustaka atau cara standar untuk melakukan tugas ini?
Contoh:
HILO -> Hilo
new york -> New York
SAN FRANCISCO -> San Francisco
Apakah ada pustaka atau cara standar untuk melakukan tugas ini?
Jawaban:
Mengapa tidak menggunakan titleRight from the docs:
>>> "they're bill's friends from the UK".title()
"They'Re Bill'S Friends From The Uk"
Jika Anda benar-benar menginginkan PascalCase, Anda dapat menggunakan ini:
>>> ''.join(x for x in 'make IT pascal CaSe'.title() if not x.isspace())
'MakeItPascalCase'
title: "Algoritme menggunakan definisi sederhana bahasa-independen dari sebuah kata sebagai kelompok huruf yang berurutan. Definisi tersebut bekerja dalam banyak konteks tetapi itu berarti bahwa apostrof dalam kontraksi dan kepemilikan membentuk batas kata, yang mungkin bukan hasil yang diinginkan ". Salah satu solusi yang mungkin adalah menggunakan jawaban Laurence dengan ekspresi reguler r"['\w]+"sehingga apostrof tidak akan mengakhiri kecocokan (tanda baca tambahan dapat ditambahkan sesuai kebutuhan).
'make IT camel CaSe'.title().replace(' ', '').
def toCamel(s): ret = ''.join(x for x in s.title() if not x.isspace()) return ret[0].lower() + ret[1:] Penggunaan:toCamel("WRITE this in camelcase") 'writeThisInCamelcase'
Yang ini akan selalu dimulai dengan huruf kecil, dan juga menghapus karakter non alfanumerik:
def camelCase(st):
output = ''.join(x for x in st.title() if x.isalnum())
return output[0].lower() + output[1:]
def capitalizeWords(s):
return re.sub(r'\w+', lambda m:m.group(0).capitalize(), s)
re.subdapat mengambil fungsi untuk "pengganti" (bukan hanya string, yang penggunaan kebanyakan orang tampaknya akrab). Fungsi repl ini akan dipanggil dengan re.Matchobjek untuk setiap kecocokan pola, dan hasilnya (yang seharusnya berupa string) akan digunakan sebagai pengganti kecocokan tersebut.
Versi yang lebih panjang dari hal yang sama:
WORD_RE = re.compile(r'\w+')
def capitalizeMatch(m):
return m.group(0).capitalize()
def capitalizeWords(s):
return WORD_RE.sub(capitalizeMatch, s)
Ini mengkompilasi pola sebelumnya (umumnya dianggap sebagai bentuk yang baik) dan menggunakan fungsi bernama alih-alih lambda.
match- masing akan diteruskan ke fungsi? dan karena matchesdalam ekspresi reguler memiliki grup. itu sebabnya baris ini ada lambda m:m.group(0).capitalize()?
re.subdiberikan callable (misalnya: sebuah fungsi) sebagai "pengganti", ia meneruskan objek yang cocok ke callable tersebut, dan mengharapkan untuk mendapatkan kembali string yang sebenarnya digunakan sebagai pengganti. Jika Anda merasa lambda membingungkan, "versi yang lebih panjang" melakukan hal yang persis sama dengan cara yang lebih bertele-tele.
Mengapa tidak menulisnya? Sesuatu seperti ini dapat memenuhi kebutuhan Anda:
def FixCase(st):
return ' '.join(''.join([w[0].upper(), w[1:].lower()]) for w in st.split())
Catatan: Mengapa saya memberikan jawaban lain? Jawaban ini didasarkan pada judul pertanyaan dan pengertian bahwa camelcase diartikan sebagai: rangkaian kata yang telah digabung (tanpa spasi!) Sedemikian rupa sehingga setiap kata asli dimulai dengan huruf kapital (sisanya huruf kecil) kecuali kata pertama dari rangkaian (yang sepenuhnya huruf kecil). Juga diasumsikan bahwa "semua string" mengacu pada himpunan karakter ASCII; unicode tidak akan berfungsi dengan solusi ini).
Diberikan definisi di atas, fungsi ini
import re
word_regex_pattern = re.compile("[^A-Za-z]+")
def camel(chars):
words = word_regex_pattern.split(chars)
return "".join(w.lower() if i is 0 else w.title() for i, w in enumerate(words))
, saat dipanggil, akan menghasilkan cara ini
camel("San Francisco") # sanFrancisco
camel("SAN-FRANCISCO") # sanFrancisco
camel("san_francisco") # sanFrancisco
Perhatikan bahwa itu gagal ketika disajikan dengan unta yang sudah bersarung tali!
camel("sanFrancisco") # sanfrancisco <-- noted limitation
Perhatikan bahwa ini gagal dengan banyak string unicode
camel("México City") # mXicoCity <-- can't handle unicode
Saya tidak memiliki solusi untuk kasus ini (atau kasus lain yang dapat diperkenalkan dengan beberapa kreativitas). Jadi, seperti dalam semua hal yang berkaitan dengan string, tutupi casing edge Anda sendiri dan semoga sukses dengan unicode!
Perpustakaan potensial: https://pypi.org/project/stringcase/
Contoh:
import stringcase
stringcase.camelcase('foo_bar_baz') # => "fooBarBaz"
Meskipun dipertanyakan apakah itu akan meninggalkan spasi. (Contoh menunjukkan itu menghapus ruang, tetapi ada masalah pelacak bug yang mencatat bahwa itu meninggalkannya).
cukup gunakan .title (), dan itu akan mengubah huruf pertama dari setiap kata menjadi kapital, istirahat kecil:
>>> a='mohs shahid ss'
>>> a.title()
'Mohs Shahid Ss'
>>> a='TRUE'
>>> b=a.title()
>>> b
'True'
>>> eval(b)
True
def camelCase(st):
s = st.title()
d = "".join(s.split())
d = d.replace(d[0],d[0].lower())
return d