我想模拟编译器的扫描器和解析器阶段。我试着用
re.findall(r"[\w,.,\"]+",file)
如果文件包含:
INT x;
READ x;
x := (x+1)*x;
WRITE x
结果是:
['INT', 'x', 'READ', 'x', 'x', 'x', '1', 'x', 'WRITE', 'x']
但是我需要;和+和()等等。。。我如何分割文字却保留字符??谢谢
这应该是输出:
['INT', 'x', ';', 'READ', 'x', ';', 'x', ':=', '(','x', '+', '1', ')', '*', 'x', ';', 'WRITE', 'x']
最简单(几乎正确)的代码应该是:
输出:
但是,只要不明确定义语言中的所有运算符,就没有解决方案来区分正确的多字符运算符(例如
:=
)和串联的单字符运算符序列(例如)*
)。因此,使用真正的解析器将更容易,例如任务。你知道吗编辑(评论后):
regex主要搜索两种类型的序列:一个或多个连续的字母数字字符(由
\w+
表示)或一个或多个非字母数字和非空格的连续字符(由[^\w\s]+
表示)。你知道吗这是我能想到的最好的办法:
其中
ret_list
的输出是:可能有一种方法可以完全用regex来实现这一点,而不必将
test_list
处理成ret_list
我是如何做到的。最大的问题是,将re.findall()
与组一起使用(我在模式中使用的方法)将返回一个包含任何匹配项的子列表给组,如下所示:希望它有帮助-如果你需要它与纯regex让我知道,我可以看看我是否可以解决一些问题!你知道吗
您可以尝试非常明确地说明要匹配的内容,其中
input
是您的输入字符串:这应该给出您要查找的确切输出:
相关问题 更多 >
编程相关推荐