使用regex sub(Python)复制字符串中的数字

时间:2017-09-03 14:00:08

标签: python regex

我有s="gh3wef2geh4ht"。如何使用sub接收s="gh333wef22geh4444ht"。我试过这个正则表达式。我做错了什么?

s=re.sub(r"(\d)",r"\1{\1}",s)

2 个答案:

答案 0 :(得分:4)

您可以使用lambda功能捕获匹配的数字并重复它:

s="gh3wef2geh4ht"
​
re.sub(r'(\d)', lambda m: m.group(1) * int(m.group(1)), s)
# 'gh333wef22geh4444ht'

答案 1 :(得分:2)

您无法在替换模式中使用正则表达式模式。 {...}不会复制第1组 n 次中捕获的文本。您需要在re.sub中使用lambda表达式或回调方法来实现您的目标:

import re
s = 'gh3wef2geh4ht'
s=re.sub(r"\d", lambda m: m.group() * int(m.group()), s)
print(s)

请参阅Python demo

请注意,此处不需要任何捕获组,因为整个匹配已在组0中可用。

此处,m分配有当前匹配对象,m.group()是匹配的文本值,int(m.group())是投射到int的数字。因此,当3匹配时,lambda表达式只会"3" * 3并作为替换返回。