2011-03-03 3 views
26

그래서 이것을 이해할 수없는 것 같습니다 ... 문자열이 "a\\nb"이고이 코드가 "a\nb"이 되길 원합니다. 나는 다음을 시도했지만 아무 것도 작동하지 않는다.파이썬 \을 012와 바꾸십시오.

>>> a 
'a\\nb' 
>>> a.replace("\\","\") 
    File "<stdin>", line 1 
    a.replace("\\","\") 
        ^
SyntaxError: EOL while scanning string literal 
>>> a.replace("\\",r"\") 
    File "<stdin>", line 1 
    a.replace("\\",r"\") 
        ^
SyntaxError: EOL while scanning string literal 
>>> a.replace("\\",r"\\") 
'a\\\\nb' 
>>> a.replace("\\","\\") 
'a\\nb' 
마지막 작품이 왜 잘 작동하기 때문에

내가 정말 이해가 안 : 여기 누락 뭔가

>>> a.replace("\\","%") 
'a%nb' 

있습니까?

수정 나는 \가 이스케이프 문자라는 것을 알고 있습니다. 내가 여기서하려고하는 것은 모든 \\n\\t 등을 \n\t 등으로 바꿔서 바꾸는 것이 내가 상상했던 방식대로 작동하지 않는 것 같습니다.

>>> a = "a\\nb" 
>>> b = "a\nb" 
>>> print a 
a\nb 
>>> print b 
a 
b 
>>> a.replace("\\","\\") 
'a\\nb' 
>>> a.replace("\\\\","\\") 
'a\\nb' 

문자열 a를 문자열 b처럼 보이기를 원합니다. 하지만 교체는 슬래시를 대체하지 않는다고 생각했습니다.

+1

원래 문자열,'A = '는 \\ nb ''은 실제로 두 개의' '\'문자가 없으며, 첫 번째 문자는 두 번째 문자의 이스케이프 문자입니다. 'print a'를하면''\ ''문자 하나만있는 것을 볼 수 있습니다. – Santa

답변

36

는, 파이썬은 온다 배터리가 포함되어 있습니다.

당신이 가진 것은있는 인코딩 된 문자열합니다 (string_escape 인코딩을 사용하여) 당신은 그것을 해독 할 :

파이썬 3에서
>>> s = r"Escaped\nNewline" 
>>> print s 
Escaped\nNewline 
>>> s.decode('string_escape') 
'Escaped\nNewline' 
>>> print s.decode('string_escape') 
Escaped 
Newline 
>>> "a\\nb".decode('string_escape') 
'a\nb' 

:

>>> import codecs 
>>> codecs.decode('\\n\\x21', 'unicode_escape') 
'\n!' 
+3

파이썬 3에 해당하는 것은 다음과 같습니다 :'bytes (s, 'utf-8'). decode ("unicode_escape")' –

+0

파이썬 3에서 : ''\\ nb'.encode(). decode ('unicode_escape') ' –

+0

@JonathanHartley 당신은 별도의 답변으로 제출해야합니다. –

7

당신이 실종되었습니다. \는 이스케이프 문자입니다. 여기

봐 : 2.4.1에서 http://docs.python.org/reference/lexical_analysis.html 가 가장 중요한 \ n

"순서를 탈출"는 개행 문자입니다. 그리고는 \\ 이스케이프 이스케이프 문자입니다 : D

>>> a = 'a\\\\nb' 
>>> a 
'a\\\\nb' 
>>> print a 
a\\nb 
>>> a.replace('\\\\', '\\') 
'a\\nb' 
>>> print a.replace('\\\\', '\\') 
a\nb 
0

도 "원시"문자열에 (= 시작 따옴표 (들) 전에 r와 문자열), 이스케이프 이스케이프 문자가 마지막이 될 수 없습니다 때문입니다 문자열의 문자. 대신 작동해야합니다 :

'\\ '[0] 
+0

왜 '\\''가 아닌가요? 그것은 유효합니다. – tzot

1

백 슬래시는 이스케이프 문자입니다. 대화식 프롬프트에 문자열 값이 표시 될 때도 마찬가지입니다. 문자열의 문자 코드 표현을 제공합니다. 문자열이 실제로 어떻게 보이는지 보려면 print 문을 사용하십시오.

이 예는 차이를 보여줍니다

>>> '\\' 
'\\' 
>>> print '\\' 
\ 
0
r'a\\nb'.replace('\\\\', '\\') 

또는

'a\nb'.replace('\n', '\\n') 
1

원래 문자열, a = 'a\\nb' 실제로 두 '\' 문자를하지 않습니다, 첫 번째는 후자가 빠져 나갈 것입니다 . 너가하면, print a, 너는 너는 실제로 단 '\' 특성이다는 것을 볼 것이다.

>>> a = 'a\\nb' 
>>> print a 
a\nb 

는 경우, 그러나, 당신이 말은 다음 슬래시를 이스케이프하지 않고, 개행 문자로 '\n'을 해석하는 것입니다

이를 위해 대체 사용할 필요가 없습니다
>>> b = a.replace('\\n', '\n') 
>>> b 
'a\nb' 
>>> print b 
a 
b 
+0

감사합니다. 문제의 일부는 \\ n이 2가 아니라 3 자라고 생각하여 자신을 혼란스럽게 만들었다는 것입니다. – kand

관련 문제