正则表达式可以在查找的同时处理替换吗?

moling3650
  • 681

比如果一个字符串s = 'A23G4HFD567',我想通过正则查找字符串里的数字,然后通过某个表达式(比如说全部都乘2)处理完了再塞回原字符串,这要如果处理?这函数期望的结果应该return 'A46G8HFD1134'

def foo(s):
    nums = re.findall('\d+', s)
    return re.sub('\d+', '%s', s) % tuple(map(lambda x: int(x) * 2, nums))
    

我只能想到这种解法,我想知道有没更好做法,一次搜索就可以完成所有

回复
阅读 4k
1 个回答
✓ 已被采纳

可以酱紫:

def double(matched):
    value = int(matched.group('value'))
    return str(value * 2)

s = 'A23G4HFD567'
print(re.sub('(?P<value>\d+)', double, s))

用lambda就是:

print(re.sub('(?P<value>\d+)', lambda matched: str(int(matched.group('value')) * 2), s))
宣传栏