我试图用python创建一个编译器,并使用re
模块来创建标记。语言将非常类似于Assembly
。在
几乎所有的东西都在工作,但我遇到了一个问题。让我举个例子来说明这个代币是什么:
mov [eax], 4
mov [name],2
mov eax, [ebx]
Tokens: [eax], [ebx]
我可以用这个模式找到我想要的:\[(eax|ebx)\]
但我在使用其他模式时会出错,我相信这是因为“|”。在
^{pr2}$
错误:
^{3}$
有没有办法用另一个字符代替'|'
?在
Tags:
您的心痛是由捕获组中的捕获组引起的,该组导致每个匹配的
groups()
调用返回一个5元组。不要使用捕获组,请尝试将非捕获组(语法:(?:pattern)
)混合到您的最终捕获组中,如下所示:示例运行:
^{pr2}$我的建议是在解包时忽略这个值。在
或者:
^{pr2}$问题不是因为中的
|
字符:这是因为表达式的这一部分定义了两个捕获组,一个嵌套在另一个组中—因此
^{pr2}$match.groups()
返回的值比解包的要多,例如第一行:避免嵌套组的一种方法是使用:
这将导致返回:
正如@Shashank指出的,您还可以使用非-capturing group
(?:...)
语法来定义嵌套的可能寄存器值模式:达到同样的目的。当有更多的可能的子模式(而且它们更复杂)时,这种方法是有利的,因为否则你需要为每种可能性详细说明整个模式,而不是利用它们可能具有的一些共性。在
相关问题 更多 >
编程相关推荐