2016-08-26 7 views
0

백 슬래시로 변경하려는 백분율 기호가있는 유니 코드가 있습니다. 난 당신이 이스케이프 시퀀스로 추가 백 슬래시를 필요로 알고 있지만, 내가 한 때이 replace() 나에게 두 개의 백 슬래시를 준 다음 'r' qualifyer 중 하나를 작동하지 않습니다파이썬 : 슬래시 바꾸기

>>> s ="%20%u200F%u05D1%u05E8%u05DB%u05EA%u200F%20%u200F%u05D4%u05E8%u05D9%u05D7%u200F%20%u200F%u05D5%u05D1%u05E8%u05DB%u05EA%u200F%20%u200F%u05D4%u05D5%u05D3%u05D0%u05D4" 
>>> s.replace("%","\") 
File "<stdin>", line 1 
s.replace("%","\")     
SyntaxError: EOL while scanning string literal 

>>> s.replace("%","\\") 
'\\20\\u200F\\u05D1\\u05E8\\u05DB\\u05EA\\u200F\\20\\u200F\\u05D4\\u05E8\\u05D9\\u05D7\\u200F\\20\\u200F\\u05D5\\u05D1\\u05E8\\u05DB\\u05EA\\u200F\\20\\u200F\\u05D4\\u05D5\\u05D3\\u05D0\\u05D4' 

. 어떤 아이디어?

+0

Python 2 또는 3을 사용하고 있습니까? – boardrider

답변

3

이것은 단지 __repr__ 문자열을 호출하는 것입니다. 사용자가 REPL에 있고 __repr__\ 문자를 이스케이프 처리하여 사용자에게 표시되는 결과를 제공하기 때문입니다.

입니다
print(s.replace("%","\\"))  
\20\u200F\u05D1\u05E8\u05DB\u05EA\u200F\20\u200F\u05D4\u05E8\u05D9\u05D7\u200F\20\u200F\u05D5\u05D1\u05E8\u05DB\u05EA\u200F\20\u200F\u05D4\u05D5\u05D3\u05D0\u05D4 

, 교체가 잘 발생합니다

당신에게 올바른 출력을 얻을, 문자열 __str__를 사용하는 print을 것이다 사용.

0

따옴표로 묶은 문자열을 표시 할 때 두 개의 백 슬래시를 입력해야하는 것처럼 파이썬은 리터럴 백 슬래시임을 나타내는 두 개를 표시합니다. '\\x41'은 4 문자이며 '\x41'은 1입니다 ('A'에 해당). 디버깅 기능이므로 인쇄 할 수없는 문자를 볼 수 있으며 그 차이를 알 수 있습니다.

>>> a = '\xa0\\xa0' 
>>> a 
'\xa0\\xa0' 
>>> print(a) 
 \xa0