2012-04-16 20 views
2

文字列がラクダケースかどうかをチェックしたいですか(ブール値)。私は、正規表現を使用する傾向があるが、他のエレガントなソリューションが動作します。私は単純な正規表現を書いたPythonでラクダのケースを確認してください

(?:[A-Z])(?:[a-z])+(?:[A-Z])(?:[a-z])+ 

これは間違いないでしょうか?または私は何かを逃していますか?

編集

私はフォーマットのテキスト文書

McDowell 
O'Connor 
T.Kasting 

のコレクションに名前をキャプチャしたいEDIT2

私は中の提案に基づいて、私の正規表現を変更しましたコメント

(?:[A-Z])(?:\S?)+(?:[A-Z])(?:[a-z])+ 
すべてのキャップを許す

(?:[A-Z][a-z]*)+ 

Altho:

+2

プログラム的に判断するのは難しいことです。 'ラクダ'ラクダのケースですか? '_camel'、' Camel'、 '_Camel'、' CONSTCAMEL'、 'HTML'、' var_camelCase'はどうでしょうか?あなたがフォーマットが何であるかを事前に知っていない限り、定義するのはかなり難しいです。 –

+0

@DavidNehme実際には、私はそれをチェックして、私の要件は異なっています/ – Dexter

+0

@ sr2222フォーマットするとどういう意味ですか?私はMcGauge、LePierreなどのような名前をテキストに取り込むことを目指しています。これがより多くの文脈を追加したいと考えています – Dexter

答えて

10

文字列に大文字と小文字の両方が含まれているかどうかを確認できます。

def camel(s): 
    return (s != s.lower() and s != s.upper()) 

tests = [ 
     "camel", 
     "camelCase", 
     "CamelCase", 
     "CAMELCASE", 
     "camelcase", 
     "Camelcase", 
     "Case" 
     ] 

for test in tests: 
    print test, camel(test) 

出力:pythonのcamel.py

camel False 
camelCase True 
CamelCase True 
CAMELCASE False 
camelcase False 
Camelcase True 
Case True 
+2

古いコメントでニックピックするのではなく、これに問題があります:例えば>>> s = "camel_case" True – Greg

+0

良い点、私の最後の編集が壊れました。スタックオーバーフロー時にはニットピッキングが有効です。 –

+1

これは確かに動作しませんか? CAMELcaseは無効で、trueを返します。 –

0

は、おそらくのようなより多くの何かをしたいです。必要に応じて

(?:[A-Z][a-z]+)+ 

アンカー^$または\zと表現:あなたはそれを避けることができます。

0

私はあなただけ(ライン=〜メートル/ [場合、文字列は、それ以前に小文字で資本を持っていることを確認して逃げるかもしれないと思いますaz] /)。与えられた例については、下限と上限をチェックするだけで失敗します。 〜Ben

+0

元の質問で正規表現を修正しました。 – Dexter

関連する問題