有没有一种方法可以引用中的整个匹配表达式回复sub不使用组?

2024-04-19 21:35:15 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我想用\这样的字符在某个特定表达式的所有出现处前面加上前缀。你知道吗

sed中,它看起来是这样的。你知道吗

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

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

我已经查看了regex docsregex howto,但是我没有看到一个等价于&字符的字符可以用来替换匹配的表达式。你知道吗

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

import re


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

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


Tags: 方法importechoredocs表达式line字符
2条回答

docs

The backreference \g<0> substitutes in the entire substring matched by the RE.

示例:

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

也可以使用Positive lookahead得到结果。你知道吗

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

相关问题 更多 >