2016-07-13 6 views
0

私はこのサブを使用しています:私はそれの代わりに 'salesProj3_monthsAgo' を返しcamelize('sales_proj_3_months_ago')呼び出すとPythonの正規表現のサブ

def camelize(key): 
    print re.sub(r"[a-z0-9]_[a-z0-9]", underscoreToCamel, key) 

def underscoreToCamel(match): 
    return match.group()[0] + match.group()[2].upper() 

この関数を呼び出す 'salesProj3MonthsAgo'。しかし、私が `camelize( 'sales_proj_30_days_ago')を呼び出すと、予想通り 'salesProj30DaysAgo'を返します。

したがって、アンダースコアの間に1文字しかない場合、正規表現置換に問題があります。どのようにこれらのケースについて説明するために私の正規表現置換を書くことができますか?

+0

def camelize(key): print re.sub(r"_[a-z0-9]", underscoreToCamel, key) def underscoreToCamel(match): return match.group()[1].upper() 

サンプル出力: だから、実際には1つの文字に一致させることができます – YOU

答えて

0

それぞれの一致が前のものと重複しないようにルック・バックを使用できます。

def camelize(key): 
    return re.sub('(?<=[a-z0-9])_[a-z0-9]', lambda m: m.group()[1].upper(), key) 
0

あなたのコードはように一致します。

s_p 
j_3 
s_a 

あなたが見ることができるようにそれが以前にマッチしたため、_3_が一致していません。 (。)_大丈夫でなければなりません

>>> camelize("sales_proj_3_months_ago") 
salesProj3MonthsAgo 
>>> camelize('sales_proj_30_days_ago') 
salesProj30DaysAgo