如果你想匹配一個任意的字符串,Python有re.escape()
。python相當於java Matcher.quoteReplacement()
但是,在我的情況下,我想使用任意字符串作爲re.sub()
中的替換字符串。 re.escape()
方法會爲此產生過度轉義,但未轉義的文字字符串不安全,因爲仍有特殊字符。
是否有相當於Java的Matcher.quoteReplacement()
?
如果你想匹配一個任意的字符串,Python有re.escape()
。python相當於java Matcher.quoteReplacement()
但是,在我的情況下,我想使用任意字符串作爲re.sub()
中的替換字符串。 re.escape()
方法會爲此產生過度轉義,但未轉義的文字字符串不安全,因爲仍有特殊字符。
是否有相當於Java的Matcher.quoteReplacement()
?
根據re.sub documentation,反斜槓是替換中唯一的「特殊」字符。
這裏只有一個明顯辦法做到這一點,再加上無明顯的,但記錄方式:
>>> 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'
>>>
是不是repl = repl.replace('\\','\\\\')
就夠了?
我想是這樣。我可以肯定這一點?替換字符串中除了反斜槓還有其他魔法字符嗎? – 2011-03-02 19:24:38
+1。正如@sln所說,還有'\ g'語法,但是也可以避開反斜槓。 –
2011-03-03 01:33:50