2016-07-13 47 views
0

我使用這個子: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() 

當我打電話camelize('sales_proj_3_months_ago')它返回 'salesProj3_monthsAgo' 而不是 'salesProj3MonthsAgo。'但是,如果我調用camelize('sales_proj_30_days_ago'),它會按預期返回「salesProj30DaysAgo」。

因此,在下劃線之間只有一個字符時,我的正則表達式替換出現問題。我如何編寫我的正則表達式來替代這些情況?

+0

_應該沒問題 – YOU

回答

0

您可以使用look-behind,以便每個匹配與前一個匹配不重疊。

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_是不匹配的,因爲它以前匹配。 所以可以真正匹配一個字符:

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

def underscoreToCamel(match): 
    return match.group()[1].upper() 

樣品輸出:(。)

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