【问题标题】:In Python re.sub function, how can I reference group 0 using \n syntax?在 Python re.sub 函数中,如何使用 \n 语法引用组 0?
【发布时间】:2019-04-29 18:34:25
【问题描述】:

在 Python re.sub() 的替换参数中,我想引用整个匹配的字符串,即组 0。但是,它没有按预期工作。

>>> re.sub(r"(\d)\1", r"\0\1", "aa11bb22cc33")
'aa\x001bb\x002cc\x003'

请注意,\1 确实正确引用了第 1 组。我必须使用 \g<n> 语法来引用第 0 组。

>>> re.sub(r"(\d)\1", r"\g<0>\1", "aa11bb22cc33")
'aa111bb222cc333'

我想知道,替换参数中是否可以使用\n语法来引用组0?

【问题讨论】:

  • 来自文档:\number 匹配同号组的内容。 组从 1 开始编号。
  • @wwii 感谢您指出这一点。我以前不知道。这与许多其他正则表达式引擎不同。
  • 这并不能回答你的问题,严格来说,但是:如果目标是用连续的数字三元组替换连续的数字对,你就不能完全不参考零组吗?类似re.sub(r"(\d)\1", r"\1\1\1", "aa11bb22cc33")
  • @Kevin 这不是一个真正的问题,我只是用它来演示我的问题。
  • 我认为可能是这样。幸好我没有把我的建议写成答案:-)

标签: python regex replace str-replace


【解决方案1】:

事实并非如此。但是,您可以在整个表达式周围放置一个捕获组,并使用 \1 引用它,并使用 \2 引用内部组。

>>> re.sub(r"((\d)\2)", r"\1\2", "aa11bb22cc33")
>>> 'aa111bb222cc333'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-05-21
    • 2019-10-06
    • 2018-04-29
    • 1970-01-01
    • 2018-07-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多