python相当于java Matcher.quoteReplacement()

时间:2011-03-02 18:16:49

标签: python regex

如果要匹配任意字符串文字,Python有re.escape()

但是,在我的情况下,我想在re.sub()中使用任意字符串文字作为替换字符串。 re.escape()方法会为此产生过多的转义,但未转义的文字字符串使用起来并不安全,因为仍有特殊字符。

是否有相当于Java的Matcher.quoteReplacement()

2 个答案:

答案 0 :(得分:2)

repl = repl.replace('\\','\\\\')不够吗?

答案 1 :(得分:1)

根据{{​​3}},

反斜杠是替换中唯一的“特殊”字符。

只有一种明显的方式可以做到这一点,加上一种非显而易见但有记录的方式:

>>> repl = r"foo\1bar\2zot"
>>> re.sub(r".*", repl, "frobozz")
Traceback (most recent call last):
[snip]
sre_constants.error: invalid group reference
>>> re.sub(r".*", repl.replace("\\", "\\\\"), "frobozz")
'foo\\1bar\\2zot'
>>> re.sub(r".*", lambda z: repl, "frobozz")
'foo\\1bar\\2zot'
>>>