2011-03-10 3 views
2

일부 특수 문자 파서에 텍스트를 입력하려고합니다. 이 파서의 문제점은 ()[] 문자에 민감하며 텍스트의 문장에서 이러한 문자가 상당히 많다는 것입니다. 파서에 대한 설명서는 ()[]이 모두 \(\) \[ \]으로 바뀌 었다고 제안합니다. 그래서 str.replace을 사용하여 그 모든 charcaters에 \을 첨부하고 있습니다. 하지만 난 내 출력으로이 얻을문자열의 특수 문자를 바꾸는 데 문제가 있습니다.

a = 'abcdef(1234)' 
a.replace('(','\(') 

:

'abcdef\\(1234)' 

내 코드에 어떤 문제가 나는 아래의 코드를 사용할 수 있습니까? 누구든지이 문제를 해결할 수있는 솔루션을 제공 할 수 있습니까?

+0

http://docs.python.org/library/re.html#re.escape 어쩌면 이미 원하는 내용을 살펴보십시오. – mouad

답변

3

REPL에 이스케이프 된 문자 (백 슬래시 등)가 인쇄되는 방법입니다. 문자열의 실제 값은 예상대로입니다.

>>> a = '\(' 
>>> a 
'\\(' 
>>> print(a) 
\(
1
suggests that all the()[] get replaced with \(\) \[ \] 

내가 알고있는 것처럼, 파서 자체는 교환을, 이렇게 입력하면하다면 :

'abcdef(1234)' 

출력은 다음과 같습니다

'abcdef\(1234\)' 

그래서 당신이 얻을 수있는 출력을 구문 분석 할 필요가 당신의 원본 텍스트 :

output.replace('\(','(').replace('\)',')')...... 

등 c ...

4

코드에 아무런 문제가 없습니다. 백 슬래시가 \\으로 이스케이프 처리되었음을 보여줌으로써 문자열에 리터럴 \이 있다는 것을 파이썬이 알려주는 방식입니다.

두 가지 문자가있는 경우 \ 다음에 (이 오는 문자 또는 한 문자 만 이스케이프 처리 된 브래킷 \(으로 알 수 있습니다.

아마도 print 'abcdef\\(1234)'을 볼 때 볼 것을 기대합니다. 당신이 원하는 것은 당신이 이미 가지고있는 것입니다.

관련 문제