2011-03-02 3 views
0

임의의 문자열 리터럴과 일치 시키려면 Python에 re.escape()이 있습니다.java Matcher.quoteReplacement()와 같은 python

그러나 제 경우 임의의 문자열 리터럴을 대체 문자열 (re.sub())으로 사용하고 싶습니다. re.escape() 메서드를 사용하면 과도한 이스케이프가 발생하지만 특수 문자가 있기 때문에 이스케이프 처리되지 않은 리터럴 문자열은 사용하기에 안전하지 않습니다.

Java의 Matcher.quoteReplacement()과 동일한 기능이 있습니까?

답변

1

백 슬래시는 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' 
>>> 
2

repl = repl.replace('\\','\\\\')으로 충분하지 않습니까?

+0

내가 그렇게 ...이 확신 할 수있을 것 같아요? 역 슬래시 이외의 다른 문자열에도 대체 문자열이 있습니까? –

+0

+1. @sln이 말했듯이 '\ g '구문도 있지만 백 슬래시를 벗어나면 처리됩니다. –

관련 문제