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

mer*_*011 4 python regex

假设我想在一个特定表达式的前缀中添加一个字符,例如\.

sed,它看起来像这样.

 echo '__^^^%%%__FooBar' | sed 's/[_^%]/\\&/g'
Run Code Online (Sandbox Code Playgroud)

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

我已经查看了正则表达式文档正则表达式howto,但是我没有看到&可用于在匹配表达式中替换的字符的等价物.

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

import re


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

是否有一种干净的方式来引用整个匹配的表达式而不创建额外的组?

grc*_*grc 8

来自文档:

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

例:

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