有没有办法在不使用组的情况下引用re.sub中的整个匹配表达式?

时间:2014-10-02 07:15:32

标签: python regex

假设我想在\之类的字符前面添加特定表达式的所有实例。

sed中,它看起来像这样。

 echo '__^^^%%%__FooBar' | sed 's/[_^%]/\\&/g'

请注意,&字符用于表示原始匹配表达式。

我查看了regex docsregex howto,但我没有看到可用于在匹配表达式中替换的&字符的等效字符。

我找到的唯一解决方法是使用一组额外的()对表达式进行分组,然后引用该组,如下所示。

import re


line = "__^^^%%%__FooBar"
print re.sub("([_%^$])", r"\\\1", line)

在没有额外创建群组的情况下,是否有一种干净的方式来引用整个匹配的表达式?

2 个答案:

答案 0 :(得分:8)

来自docs

  

反向引用\g<0>替代RE匹配的整个子字符串。

示例:

>>> print re.sub("[_%^$]", r"\\\g<0>", line)
\_\_\^\^\^\%\%\%\_\_FooBar

答案 1 :(得分:4)

您也可以使用Positive lookahead获得结果。

>>> print re.sub("(?=[_%^$])", r"\\", line)
\_\_\^\^\^\%\%\%\_\_FooBar