基本的には、thisの逆です。ここに私の試みはありますが、うまくいきません。not_camel_caseをnotCamelCaseおよび/またはNotCamelCaseにPythonで変換しますか?
def titlecase(value):
s1 = re.sub('(_)([a-z][A-Z][0-9]+)', r'\2'.upper(), value)
return s1
基本的には、thisの逆です。ここに私の試みはありますが、うまくいきません。not_camel_caseをnotCamelCaseおよび/またはNotCamelCaseにPythonで変換しますか?
def titlecase(value):
s1 = re.sub('(_)([a-z][A-Z][0-9]+)', r'\2'.upper(), value)
return s1
def titlecase(value):
return "".join(word.title() for word in value.split("_"))
をPythonは正規表現よりも読みやすい、そしてあなたが望むものをやっていないときに簡単修正します。
あなたが同様に小文字の最初の文字をしたい場合は、私は、ちょうど最初の文字小文字に、ほとんどの作業を行うために上記の関数を呼び出す第二の機能を使用します:jtbandesが言ったように
def titlecase2(value):
return value[:1].lower() + titlecase(value)[1:]
正規表現にエラーがあります。代わりに、しかし
([a-z][A-Z][0-9]+) # would match 'oN3' but not 'one'
使用
([a-zA-Z0-9]+) # matches any alphanumeric word
のr'\2'.upper()
がそのように使用することはできませんので、これも動作しません。代わりに、試してみてください。
s1 = re.sub('(_)([a-zA-Z0-9]+)', lambda p: p.group(2).capitalize(), value)
を、文字クラスを一緒にマッシュする必要があります
([a-zA-Z0-9]+)
次のトリックは、あなたが置き換えを行うことです。あなたは
r'\2'.upper()
(上段)を言うとき、実際に前と呼ばれるサブ起こります。しかし、あなたはsub
の別の機能を使用することができます:あなたは試合を処理するために関数を渡すことができます。
re.sub('(_)([a-zA-Z0-9]+)', lambda match: match.group(2).capitalize(), value)
今、あなたのラムダが一致して呼び出されます。また、あなたは交換が複数の場所で発生持ってsubn
を使用することができます。
re.subn('(_)([a-zA-Z0-9]+)', lambda match: match.group(2).capitalize(), value)[0]
@kindall
は、(クレジットは彼に行く)良い解決策を提供します。 しかし、あなたは構文たい場合は、「myCamel」最初の単語を大文字にする必要はありませんが、あなたは少し変更する必要があります:正規表現を使用して、NotCamelCaseについては
def titlecase(value):
rest = value.split("_")
return rest[0]+"".join(word.title() for word in rest[1:])
正確に。正規表現は赤ちゃんだった。文字列オブジェクトのメソッドがあなたが望むことをするかどうかをチェックする前に、正規表現を使用しないでください。この場合、 'split'は文字列をトークン化し、' title'は便利に単語を大文字にします。 –