2013-10-29 8 views
2

파일에서 읽은 문자열 집합을 가지고 있습니다. ['\x1\p1', '\x2\p2', '\x3\p3', ... etc.]입니다.파이썬에서 백 슬래시를 비교하는 방법

변수로 읽어 들이고 ['\\x1\\p1', '\\x2\\p2', '\\x3\\p3', ... etc.]으로 표시된 문자열을 인쇄 할 때. 변수가 내부적으로 '\x1\p1', ... etc.으로 표시되지만 표시되면 이중 슬래시로 표시됩니다.

문장에서이 목록의 요소를 검색하고 바꿔보고 싶습니다. 예를 들어 \x1\p1이 문장 "How are you doing \x1\p1"에있는 경우 을 입력 한 다음 '\x1\p1'을 'Y'로 바꿉니다. 그러나 replace 메서드는이 경우 작동하지 않습니다! 이유를 궁금해?

나를 더 설명하자 내 텍스트 파일 ( codes.txt)의 새로운 라인으로 구분 된 항목 \xs1\x32, \xs2\x54 있습니다. 내가 다음

with open('codes') as codes: 
    code_list = codes.readlines() 

사용하여 읽을 때, 나는 '\\xs1\\x32'

다음 날 문자열 지금 target_string = 'Hi! my name is \xs1\x32'

할 대상하자 나는이 code_list_element_1를 인쇄 할 때 code_list_element_1 = code_list[1].rstrip()

, 그것은 표시 말할 수 않습니다 예를 들어 'Y'

012와 함께 target_string에 \xs1\x32으로되어있는 code_list_element_1을 대체하고 싶습니다.

그래서 code_list_element_1 in target_string을 시도했습니다. 내가 지금 변수 find_me = '\xs1\x32'

를 초기화하는 대신 텍스트 파일에서 코드를 읽는, False

다음을 얻을, 나는 find_me in target_string을 시도해보십시오. 나는 내가 원하는 것을 True

따라서 target_string.replace(find_me,"Y") 디스플레이를 얻을 : "Hi! my name is Y"

+1

시도한 코드를 게시하고 귀하가 얻은 것과 기대하는 바를 알려주십시오. –

+0

이것은 나를 위해 일했다 :) 're.search (r "% s"% code_list_element_1, target_string)' 're (r "% s"% code_list_element_1, "Y", target_string)' – suzee

답변

4

당신은 파이썬으로 다시 붙여 넣을 수있는 문자열 표현을 찾고 있습니다; 백 슬래시는 값이 이스케이프 시퀀스 (예 : \n, 개행을 의미하거나 \xfe, 값 254 인 16 진수 FE를 의미하는 바이트)로 해석되지 않도록 두 배가됩니다.

>>> '\\x1\\p1' 
'\\x1\\p1' 
>>> r'\x1\p1' 
'\\x1\\p1' 

경우 :

당신이 새로운 문자열 값을 구축하는 경우에는 없음, 또는 사용 원시 문자열 리터럴가 이스케이프 시퀀스를 볼 수 파이썬을 방지하기 위해 그 두 배로 백 슬래시를 사용해야합니다 이 특별한 예제는 백 슬래시를 적절히 처리하지 않으면 실제로 예외가 발생합니다 :

>>> '\x1\p1' 
ValueError: invalid \x escape 

파이썬은 두 자리 16 진수를 예상하므로 af ter a \x 탈출.

2

원시 문자열 (접두사가 r 인 항목은 백 슬래시 - itis에 매우 유용합니다.

In [9]: a=r"How are you doing \x1\p1" 

In [10]: a 
Out[10]: 'How are you doing \\x1\\p1' 

In [11]: a.replace(r'\x1\p1', 'Y') 
Out[11]: 'How are you doing Y' 

In [12]: 
관련 문제