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

比如果一个字符串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))
    

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

阅读 4.6k
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))
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题