我正在使用这个子:
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 :(得分:1)
您可以使用后视,以便每个匹配不与前一个匹配。
def camelize(key):
return re.sub('(?<=[a-z0-9])_[a-z0-9]', lambda m: m.group()[1].upper(), key)
答案 1 :(得分: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