【问题标题】:Python Regex instantly replace groupsPython Regex 立即替换组
【发布时间】:2012-12-10 01:28:07
【问题描述】:

有没有办法直接用正则表达式替换所有组?

正常方式:

re.match(r"(?:aaa)(_bbb)", string1).group(1)

但我想实现这样的目标:

re.match(r"(\d.*?)\s(\d.*?)", "(CALL_GROUP_1) (CALL_GROUP_2)")

我想从 Regex 刚刚捕获的组中立即构建新字符串。

【问题讨论】:

    标签: python regex regex-group


    【解决方案1】:

    接受的答案是完美的。我要补充一点,使用这种语法可能会更好地实现组引用:

    r"\g<1> \g<2>"
    

    用于替换字符串。这样,您可以解决组后面可能跟一个数字的语法限制。同样,这一切都出现在文档中,没有什么新鲜的,只是有时乍一看很难发现。

    【讨论】:

    • 如果你想在组之后添加一个数字,这是要走的路,否则,它会将数字值与组序数混淆。
    【解决方案2】:

    看看re.sub:

    result = re.sub(r"(\d.*?)\s(\d.*?)", r"\1 \2", string1)
    

    这是 Python 的正则表达式替换(replace)函数。替换字符串可以用所谓的反向引用(反斜杠、组号)填充,这些反向引用被替换为组匹配的内容。组的计数与group(...) 函数相同,即从1 开始,从左到右,通过左括号。

    【讨论】:

    • 比文档更清晰!不明白小组是如何与这个合作的。他们应该添加这样的例子。
    • 它从第一次开始就有效,这是一个很好的解释方式。谢谢,你能解释一下子组应该如何以适当的方式打电话(r(r))r((r)((r)r)) 有点情况吗?
    • @RakshithaMurangaRodrigo 这些组从左到右编号,从他们开始的地方开始。因此,如果我在组的前面插入每个组的编号,它们将被排序:1(r2(r))r3(4(r)5(6(r)r))
    • 您还可以使用以下符号为组提供名称:(?P&lt;group-name&gt;&lt;pattern&gt;),然后以这种方式引用它们:\g&lt;group-name&gt;。恕我直言,这是最方便的方式。
    猜你喜欢
    • 2016-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-17
    相关资源
    最近更新 更多