Misal:
HILO -> Hilo
new york -> New York
SAN FRANCISCO -> San Francisco
Bu görevi gerçekleştirmenin bir kütüphanesi veya standart bir yolu var mı?
Misal:
HILO -> Hilo
new york -> New York
SAN FRANCISCO -> San Francisco
Bu görevi gerçekleştirmenin bir kütüphanesi veya standart bir yolu var mı?
Yanıtlar:
Neden titlebelgelerden Sağ'ı kullanmıyorsunuz?
>>> "they're bill's friends from the UK".title()
"They'Re Bill'S Friends From The Uk"
PascalCase'i gerçekten istiyorsanız, bunu kullanabilirsiniz:
>>> ''.join(x for x in 'make IT pascal CaSe'.title() if not x.isspace())
'MakeItPascalCase'
title: "Algoritma, bir kelimenin ardışık harf grupları olarak dilden bağımsız basit bir tanımını kullanır. Tanım birçok bağlamda işe yarar, ancak kısaltmalardaki ve iyeliklerdeki kesme işaretlerinin kelime sınırlarını oluşturduğu anlamına gelir, bu istenen sonuç olmayabilir ". Olası bir çözüm, Laurence'in yanıtını normal ifadeyle kullanmaktır, r"['\w]+"böylece kesme işaretleri eşleşmeyi sonlandırmaz (gerektiğinde ek noktalama eklenebilir).
'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:] toCamel("WRITE this in camelcase") 'writeThisInCamelcase'
Bu her zaman küçük harfle başlar ve ayrıca alfanümerik olmayan karakterleri çıkarır:
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.sub"değiştirme" için bir işlev alabilir (çoğu insanın aşina olduğu bir kullanım olan bir dizeden ziyade). Bu repl işlevi re.Match, modelin her eşleşmesi için bir nesneyle çağrılacak ve sonuç (bir dizge olmalıdır) bu eşleşmenin yerine geçecek şekilde kullanılacaktır.
Aynı şeyin daha uzun bir versiyonu:
WORD_RE = re.compile(r'\w+')
def capitalizeMatch(m):
return m.group(0).capitalize()
def capitalizeWords(s):
return WORD_RE.sub(capitalizeMatch, s)
Bu, kalıbı önceden derler (genellikle iyi bir biçim olarak kabul edilir) ve lambda yerine adlandırılmış bir işlevi kullanır.
matchişleve geçirilecek? ve çünkü matchesnormal ifadelerde gruplar var. bu yüzden bu hat var lambda m:m.group(0).capitalize()?
re.subbir çağrılabilir verilir: "yerine" olarak (örneğin bir işlevi), o kadar çağrılabilir için maç nesneyi iletir ve beklediği aslında yedek olarak kullandığı bir dize geri almak için. Lambdaları kafa karıştırıcı bulursanız, "daha uzun sürüm" tam olarak aynı şeyi daha ayrıntılı bir şekilde yapar.
Neden bir tane yazmıyorsun? Bunun gibi bir şey gereksinimlerinizi karşılayabilir:
def FixCase(st):
return ' '.join(''.join([w[0].upper(), w[1:].lower()]) for w in st.split())
Not: Neden başka bir cevap veriyorum? Bu cevap, sorunun başlığına ve deve harfinin şu şekilde tanımlandığı fikrine dayanmaktadır: orijinal kelimelerin her biri bir büyük harfle başlayacak şekilde (geri kalanı küçük harf olmak üzere) birleştirilmiş (boşluksuz!) Bir dizi kelime Serinin ilk kelimesi hariç (tamamen küçük harf). Ayrıca "tüm dizelerin" ASCII karakter kümesini ifade ettiği varsayılır; unicode bu çözümle çalışmaz).
Yukarıdaki tanım göz önüne alındığında, bu işlev
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))
, çağrıldığında bu şekilde sonuçlanır
camel("San Francisco") # sanFrancisco
camel("SAN-FRANCISCO") # sanFrancisco
camel("san_francisco") # sanFrancisco
Zaten deve kasalı bir ip ile sunulduğunda başarısız olduğunu unutmayın!
camel("sanFrancisco") # sanfrancisco <-- noted limitation
Birçok unicode dizesiyle başarısız olduğunu unutmayın.
camel("México City") # mXicoCity <-- can't handle unicode
Bu vakalar için (veya biraz yaratıcılıkla ortaya çıkabilecek diğer vakalar) için bir çözümüm yok. Öyleyse, dizelerle ilgili her şeyde olduğu gibi, kendi uç durumlarınızı koruyun ve unicode ile iyi şanslar!
Potansiyel kütüphane: https://pypi.org/project/stringcase/
Misal:
import stringcase
stringcase.camelcase('foo_bar_baz') # => "fooBarBaz"
İçeride boşluk bırakıp bırakmayacağı şüpheli olsa da (Örnekler boşluğu kaldırdığını gösteriyor, ancak onları içeride bıraktığını belirten bir hata izleyici sorunu var.)
sadece .title () kullanın ve her kelimenin ilk harfini büyük, kalanı küçük olarak dönüştürür:
>>> 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