繁体   English   中英

Python正则表达式子

[英]Python regular expression 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_monthsAgo'而不是'salesProj3MonthsAgo'。 但是,如果我调用`camelize('sales_proj_30_days_ago'),它会按预期返回'salesProj30DaysAgo'。

因此,当下划线之间只有一个字符时,我的正则表达式替换会出现问题。 如何写我的正则表达式替代来解决这些情况?

您可以使用后向搜索,以便每个匹配项都不会与前一个匹配项重叠。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM