例:
HILO -> Hilo
new york -> New York
SAN FRANCISCO -> San Francisco
このタスクを実行するためのライブラリまたは標準的な方法はありますか?
例:
HILO -> Hilo
new york -> New York
SAN FRANCISCO -> San Francisco
このタスクを実行するためのライブラリまたは標準的な方法はありますか?
回答:
titleドキュメントからRightを使用しないのはなぜですか。
>>> "they're bill's friends from the UK".title()
"They'Re Bill'S Friends From The Uk"
PascalCaseが本当に必要な場合は、これを使用できます。
>>> ''.join(x for x in 'make IT pascal CaSe'.title() if not x.isspace())
'MakeItPascalCase'
title次のように記されています。これは望ましい結果ではない可能性があります。」1つの可能な解決策は、正規表現でローレンスの回答を使用して、r"['\w]+"アポストロフィが一致を終了しないようにすることです(必要に応じて、追加の句読点を追加できます)。
'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'
def capitalizeWords(s):
return re.sub(r'\w+', lambda m:m.group(0).capitalize(), s)
re.sub「置換」用の関数をとることができます(ほとんどの人がよく知っているように見える文字列だけではありません)。このrepl関数はre.Match、パターンの一致ごとにオブジェクトを使用して呼び出され、結果(文字列である必要があります)がその一致の代わりとして使用されます。
同じもののより長いバージョン:
WORD_RE = re.compile(r'\w+')
def capitalizeMatch(m):
return m.group(0).capitalize()
def capitalizeWords(s):
return WORD_RE.sub(capitalizeMatch, s)
これはパターン(通常は適切な形式と見なされます)をプリコンパイルし、ラムダの代わりに名前付き関数を使用します。
matchが関数に渡されますか?そして以来、matches正規表現では、グループを持っています。それがこの行が存在する理由lambda m:m.group(0).capitalize()ですか?
re.sub(例:機能)を呼び出し可能与えられている「代替」として、その呼び出し可能に一致するオブジェクトを渡し、それが実際に代替として使用するものである文字列を取り戻すことを期待。ラムダが紛らわしい場合、「長いバージョン」はより詳細な方法でまったく同じことを行います。
書いてみませんか?このようなものがあなたの要件を満たすかもしれません:
def FixCase(st):
return ' '.join(''.join([w[0].upper(), w[1:].lower()]) for w in st.split())
注:なぜさらに別の回答を提供するのですか? この回答は、質問のタイトルと、キャメルケースが次のように定義されているという概念に基づいています。連結された一連の単語(スペースなし!)で、元の単語のそれぞれが大文字で始まる(残りは小文字)シリーズの最初の単語(完全に小文字)を除いて。また、「すべての文字列」はASCII文字セットを指すと想定されています。Unicodeはこのソリューションでは機能しません)。
上記の定義を考えると、この関数は
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))
が呼び出されると、このようになります
camel("San Francisco") # sanFrancisco
camel("SAN-FRANCISCO") # sanFrancisco
camel("san_francisco") # sanFrancisco
すでにキャメルのケースに入った文字列を提示すると失敗することに注意してください!
camel("sanFrancisco") # sanfrancisco <-- noted limitation
多くのユニコード文字列で失敗することに注意してください
camel("México City") # mXicoCity <-- can't handle unicode
私はこれらのケース(またはいくつかの創造性で導入される可能性のある他のケース)に対する解決策を持っていません。したがって、文字列に関連するすべてのことと同様に、独自のエッジケースをカバーし、Unicodeで頑張ってください!
潜在的なライブラリ:https : //pypi.org/project/stringcase/
例:
import stringcase
stringcase.camelcase('foo_bar_baz') # => "fooBarBaz"
スペースを残すかどうかは疑問ですが(例ではスペースを削除することを示していますが、バグトラッカーの問題があり、スペースを残すことに注意しています)。
.title()を使用するだけで、大文字のすべての単語の最初の文字が変換され、残りは小さくなります。
>>> 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