2013-10-14 4 views
0

사용자 정의 파이썬 VM 위에 어셈블러를 작성하는 중입니다.파일에서 읽은 개행 문자가 자동으로 이스케이프 처리됩니다.

개행 문자를 나타낼 수 있어야하는 어셈블리 평면 파일을 구문 분석하기 위해 정규 표현식을 사용하고 있습니다. 플랫 파일에서

은 같은 모양 라인은 다음과 같습니다

line .BYT '\n'

그리고 정규식 :

((?P<label>[a-zA-Z0-9]+)\s+)?((?P<type>\.[a-zA-Z]+)\s+)(?P<value>(-?[0-9]+)|'(.{1,2})')

이 정규식은 잘 작동 - 것을 제외하고을은 줄 바꿈 것을 칠 때 문자가 \n 대신 \\n을 반환합니다.

나는 값을 청소 교체를 사용하려고했습니다

ipdb> ch 
'\\n' 
ipdb> ch.replace(r'\\', r'\') 
*** SyntaxError: EOL while scanning string literal (<stdin>, line 1) 
ipdb> ch.replace('\\\\', '\\') 
'\\n' 

어떻게 메모리에 표현 단지 원시 개행 문자를받을 수 있나요?

답변

2

한 줄의 텍스트가 n 뒤에 \ 문자가 포함 된 경우 repr\n 구별하기 위해 D '때, 그때는 \\n처럼 보일 것이다. 예를 들면 : 당신이 개행 문자 chr(10)\ + n을 바꾸려면

>>> a = "\\n" 
>>> len(a) 
2 
>>> print a 
\n 
>>> a 
'\\n' 
>>> a[0] 
'\\' 
>>> len(a[0]) 
1 

, 그럼 당신은 충분히 쉽게 작업을 수행 할 수 있습니다

>>> a = "\\n" 
>>> a 
'\\n' 
>>> b = a.replace("\\n", "\n") 
>>> b 
'\n' 
>>> len(a) 
2 
>>> len(b) 
1 
>>> ord(b) 
10 
관련 문제