【发布时间】:2015-07-08 02:11:39
【问题描述】:
我正在尝试在 python 中创建一个编译器,并且我正在使用re 模块来创建令牌。语言将与Assembly 非常相似。
几乎一切正常,但我遇到了令牌问题。让我举个例子说明这个令牌是什么:
mov [eax], 4
mov [name],2
mov eax, [ebx]
代币:[eax]、[ebx]
我可以使用这个模式找到我想要的:\[(eax|ebx)\]
但是在与其他模式一起使用时出现错误,我相信这是因为'|'。
SCANNER = re.compile(r"""
;(.)* # comment
|(\[-?[0-9]+\]) # memory_int
|(\[-?0x[0-9a-fA-F]+\]) # memory_hex
|(\[(eax|ebx)\]) # memory access with registers
""", re.VERBOSE)
for match in re.finditer(SCANNER, lines[i]):
comment, memory_int, memory_hex, memory_reg = match.groups()
错误:
ValueError: too many values to unpack (expected 4)
有没有办法将'|' 替换为另一个字符?
【问题讨论】:
-
作为非回答评论,我衷心建议您明确而不是隐含地使用
re.foo(..., flags=X)。并非所有re方法都将标志作为第三个变量,因此出于习惯输入flags=X会让您在某个晚上免于头疼。
标签: python regex string python-3.x token