我有一个字符串和几个组的正则表达式。我想在每个匹配的组之前和之后添加一些字符串。我该怎么做?以下是仅用于帮助描述我的问题的演示代码。
data = "aa11bb123cc3333dd12eeeff3"
regex = re.compile(r"([a-z])\1(\d)(\d)(?=[a-z])")
预期的结果是(使用<
和>
围绕匹配的组):
<a>a<1><1>bb123cc3333<d>d<1><2>eeeff3
还请考虑像(\d)*
这样的正则表达组,我不知道预先有多少组。
您可以使用当前的正则表达式([a-z])\1(\d)(\d)(?=[a-z])
并将其替换为此,
<\1>\1<\2><\3>
您可以修改代码以使用re.sub
并获得预期的输出。
import re
data = "aa11bb123cc3333dd12eeeff3"
regex = re.compile(r"([a-z])\1(\d)(\d)(?=[a-z])")
print(re.sub(regex, r'<\1>\1<\2><\3>', data))
像你预期的打印,
<a>a<1><1>bb123cc3333<d>d<1><2>eeeff3
此外,当你更新你的帖子时,只是澄清这个正则表达式(\d)*
只有一个组,并不是组外有*
,它会使组的数量多倍。 (\d)*
的行为与\d*
相同,只是组中捕获的数字只有一个,而且恰好是匹配的最后一个。