【问题标题】:How to add string before and after each regex matched groups in Python?如何在Python中每个正则表达式匹配组之前和之后添加字符串?
【发布时间】:2019-09-20 02:10:13
【问题描述】:

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

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】:

    您可以使用当前的正则表达式 ([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* 相同,只是组中捕获的数字将只是一个,并且恰好是最后一个匹配的数字。

    【讨论】:

    • 如果正则表达式组类似于(\d)* 而我不知道事先有多少组?
    • (\d)* 仍然只是一个组,并且正则表达式中的组数与您编写它们时保持不变。这并不是说组的数量会有所不同,但是是的,匹配的数量可能是多个,但这不是问题。就像在您当前的正则表达式中一样,有三个组,在您向其中添加更多组之前,它们将仅保留三个。你能准确地告诉我你面临什么问题吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-29
    • 1970-01-01
    • 2021-01-05
    • 2020-06-16
    • 1970-01-01
    • 2021-04-23
    • 1970-01-01
    相关资源
    最近更新 更多