2016-07-13 51 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