如何在Python中的每个正则表达式匹配组之前和之后添加字符串?

问题描述 投票:2回答:1

我有一个字符串和几个组的正则表达式。我想在每个匹配的组之前和之后添加一些字符串。我该怎么做?以下是仅用于帮助描述我的问题的演示代码。

data = "aa11bb123cc3333dd12eeeff3"
regex = re.compile(r"([a-z])\1(\d)(\d)(?=[a-z])")

预期的结果是(使用<>围绕匹配的组):

<a>a<1><1>bb123cc3333<d>d<1><2>eeeff3

还请考虑像(\d)*这样的正则表达组,我不知道预先有多少组。

python regex regex-group
1个回答
1
投票

您可以使用当前的正则表达式([a-z])\1(\d)(\d)(?=[a-z])并将其替换为此,

<\1>\1<\2><\3>

Regex Demo

您可以修改代码以使用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*相同,只是组中捕获的数字只有一个,而且恰好是匹配的最后一个。

© www.soinside.com 2019 - 2024. All rights reserved.