如果要匹配任意字符串文字,Python有re.escape()
。
但是,在我的情况下,我想在re.sub()
中使用任意字符串文字作为替换字符串。 re.escape()
方法会为此产生过多的转义,但未转义的文字字符串使用起来并不安全,因为仍有特殊字符。
是否有相当于Java的Matcher.quoteReplacement()
?
答案 0 :(得分:2)
repl = repl.replace('\\','\\\\')
不够吗?
答案 1 :(得分:1)
反斜杠是替换中唯一的“特殊”字符。
只有一种明显的方式可以做到这一点,加上一种非显而易见但有记录的方式:
>>> 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'
>>>