从文件读取的换行文字正在自动转义

时间:2013-10-14 00:39:22

标签: python regex string escaping

我正在自定义python 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'

如何才能获得内存中表示的原始换行符?

1 个答案:

答案 0 :(得分:2)

如果一行文字包含\个字符后跟n字符,那么当\\n将其与{repr区分开来时,它会看起来像\n 1}}。例如:

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

如果您想用换行符\替换n + chr(10),那么您可以轻松地做到这一点:

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