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

时间:2019-05-01 13:59:18

标签: python regex regex-group

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

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

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

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

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

1 个答案:

答案 0 :(得分:1)

您可以使用当前的正则表达式<a4j:commandLink id="lnk_view" action ="#{FileUploadController.view}" style="display: none" onclick ="startLoad();" reRender="info" oncomplete = "stopLoad();"> <f:param name="selectedFile" value="#{file.serialNo}"/> </a4j:commandLink> 并将其替换为此,

([a-z])\1(\d)(\d)(?=[a-z])

Regex Demo

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