Python正则表达式子

2024-04-25 18:11:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用此sub:

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\u monthsAgo'而不是'salesProj3MonthsAgo'。但是,如果我调用'camelize('sales\u proj\u 30\u days\u ago'),它会按预期返回'salesProj30DaysAgo'

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


Tags: key函数rereturndefmatchgroupago
2条回答

您可以使用“向后看”,这样每个匹配项就不会与前一个匹配项重叠

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

您的代码匹配如下:

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

相关问题 更多 >