Python正则表达式子

时间:2016-07-13 02:25:10

标签: python regex

我正在使用这个子:

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'。

因此,当下划线之间只有一个字符时,我的正则表达式替换存在问题。如何编写我的正则表达式替换以解释这些情况?

2 个答案:

答案 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