我有s="gh3wef2geh4ht"
。如何使用sub接收s="gh333wef22geh4444ht"
。我试过这个正则表达式。我做错了什么?
s=re.sub(r"(\d)",r"\1{\1}",s)
答案 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
并作为替换返回。