使用Regex Sub(Python)在字符串中复制数字



我有一个 s="gh3wef2geh4ht"。如何使用子接收s="gh333wef22geh4444ht"。我尝试了此 Regexp 。我做错了什么?

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

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

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

您不能在替换模式中使用正则表达模式。{...}不复制第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与curren匹配对象分配,m.group()是匹配的文本值,int(m.group())是铸造为int的数字。因此,当匹配3时,lambda表达式确实只能"3" * 3并返回为替换。

相关内容

最新更新