2010-11-30 4 views
6

re.search()와 함께 사용하는 검색어가 있는데 문자열 (예 :(), \ /, {})에서 문자를 이스케이프하는 가장 좋은 방법은 무엇인지 알고 싶습니다. 그래서 내 정규식이 올바르게 해석합니다.파이썬 문자열에서 특수 문자를 이스케이프하는 가장 좋은 방법은 무엇입니까?

현재 내가 거기 다음

searchString.replace('\\', '\\\\').replace(')','\)').replace('(','\(') 

이 작업을 수행하는 내장 아무것도 있는가하고 나하고 더 나은 명시 적으로 내가 탈출해야하는 모든 특수 문자에 대체 전화 외에?

+0

실제로 원시 문자열을 사용하십시오. – Kabie

+2

체크 아웃해야합니다. revisecape (...) – pyfunc

+0

@pyfunc : 답변을 작성하십시오. 달성하려는 것입니다. –

답변

17

re.escape 함수가 해당 작업을 수행합니다.

>>> import re 
>>> re.escape('escape this. /') 
'escape\\ this\\.\\ \\/' 
>>> 
>>> re.escape('www.stackoverflow.com') 
'www\\.stackoverflow\\.com' 

문서는 말하기를 : 모든 비 영숫자와

반환 문자열이 백 슬래쉬; 정규식 메타 문자가 포함되어있을 수있는 임의의 리터럴 문자열과 일치시키려는 경우에 유용합니다.

0

날 문자열을 사용하십시오.

원료 스트링의 워드 프로세서

:는 R '가'또는 'R'프리픽스가 존재하는 경우

는 백 슬래시 다음 캐릭터 변경 없는 문자열 포함되고 모든 슬래시는 문자열 왼쪽. 예를 들어 리터럴 r "\ n"문자열은 두 개의 문자 (백 슬래시 및 소문자 'n')로 구성됩니다. 문자열 따옴표는 이 백 슬래시로 이스케이프 될 수 있지만 백 슬래시가 문자열에 남아 있습니다. 예제의 경우 r "\" "은 유효한 문자열 리터럴은 백 슬래시와 큰 따옴표로 구성되며 r"\ " 은 유효한 문자열 리터럴이 아닙니다 ( 원시 문자열도 홀수로 끝날 수 없습니다). 수 백 슬래시의 ) 백 슬래시가 다음 따옴표 문자를 이스케이프 것이기 때문이다. 특히, 원시 문자열) (단일 백 슬래시로 끝날 수 없습니다. 참고도 줄 바꿈 다음에 단일 백 슬래시 그 두으로 해석된다 문자는 줄 연속이 아닌 문자열의 일부로,

+0

오히려 바보 같은 질문이지만, 내 문자열이 변수에 있으면 'r'접두사를 붙이려면 어떻게해야합니까? 내가 찾은 예제는 항상 raw_str = r "foo"입니다. –

+0

문자열 접두어를 걱정할 필요가있는 유일한 시간은 직접 정의 할 때입니다. 원시 스트링은 실제로 많은 백 슬래시 등으로 문자열을 정의하기위한 편의입니다. 다음은 완전히 동일하며 유일한 차이는 'r'\ n 개행 '=='\\ n 개행 '입니다. 따라서 입력으로받은 문자열에'r'을 앞에 붙이지 않아도됩니다. 백 슬래시는 이미 이스케이프 처리되어 있거나 이미 이스케이프 처리되어 있습니다. 말이 돼? 대화 형 프롬프트에서 사용해보십시오. – awesomo

0

파이썬의 원시 문자열 표기법을 사용하십시오. http://docs.python.org/library/re.html에서 :

정규 표현식은 백 슬래시 문자 ('\') 특별 형태를 나타 내기 위해 또는 특수 문자 가 자신의 특별한 의미를 호출하지 않고 사용할 수 있도록 사용합니다. 이것은 와 충돌합니다. 같은 목적의 동일한 문자를 사용하는 파이썬의 동일한 문자 리터럴; 예를 들어, 리터럴 백 슬래시를 일치하도록, 하나는 '\\'패턴 문자열로 는 정규 표현식 \를해야하기 때문에 쓰기에있을 수 있습니다, 각 백 슬래시 정기적 파이썬 문자열 안에 \로 표시해야 정확한.

해결책은 정규식 패턴의 경우 Python의 raw 문자열 표기법을 사용하는 것입니다. 백 슬래시는 특수 문자로 으로 처리되지 않습니다. 에는 'r'이라는 접두어가 붙습니다. 그래서 "\ n"은 '\' 과 'n'을 포함하는 두 개의 문자 문자열이고 "\ n"은 한 줄의 새 문자가 포함 된 문자열입니다. 보통 패턴은이 원시 문자열 표기법을 사용하여 Python 코드로 표현됩니다.

관련 문제