neu*_*ino 9 python math syntax-checking
我需要的是使用python检查字符串是否是有效的数学表达式.
为简单起见,我想说我只需要数字和嵌套括号的运算+ - * /
符(也+ -
就是一元).我还为完整性添加了简单的变量名称.
所以我可以这样测试:
test("-3 * (2 + 1)") #valid
test("-3 * ") #NOT valid
test("v1 + v2") #valid
test("v2 - 2v") #NOT valid ("2v" not a valid variable name)
Run Code Online (Sandbox Code Playgroud)
我尝试了pyparsing,但只是尝试了这个例子:"简单的代数表达式解析器,执行+,-,*,/
和^
算术运算"我得到了无效的代码并且还试图修复它我总是得到错误的语法被解析而不会引发异常
试试:
>>>test('9', 9)
9 qwerty = 9.0 ['9'] => ['9']
>>>test('9 qwerty', 9)
9 qwerty = 9.0 ['9'] => ['9']
Run Code Online (Sandbox Code Playgroud)
两个测试通过... o_O
有什么建议?
小智 3
这是因为 pyparsing 代码允许使用函数。(顺便说一句,它做的事情比您需要的要多得多,即创建一个堆栈并对其进行评估。)
对于初学者,您可以从代码中删除pi
and ident
(可能还有我现在缺少的其他内容)以禁止使用字符。
原因不同:PyParsing 解析器默认不会尝试消耗整个输入。如果无法解析整个输入,您必须添加+ StringEnd()
(当然还要导入它)到末尾,expr
以使其失败。在这种情况下,pyparsing.ParseException
将会被提高。(来源: http: //pyparsing-public.wikispaces.com/FAQs)
如果您想学习一些解析,那么您需要的内容可能可以使用任何像样的解析库在不到三十行的时间内构建(我喜欢LEPL)。
归档时间: |
|
查看次数: |
2235 次 |
最近记录: |