1

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

我怎样才能得到内存中表示的原始换行符?

4

1 回答 1

2

如果一行文本包含一个\字符后跟一个n,那么它将看起来像\\nwhen repr'd 将其与 . 区分开来\n。例如:

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

如果你想用换行符替换\+ ,那么你可以很容易地做到这一点:nchr(10)

>>> a = "\\n"
>>> a
'\\n'
>>> b = a.replace("\\n", "\n")
>>> b
'\n'
>>> len(a)
2
>>> len(b)
1
>>> ord(b)
10
于 2013-10-14T00:46:49.527 回答