我在Python中创建一种编程语言,我缺少基本语言的一个主要组件是解析数学方程的能力。我有函数来解析数学,但我需要能够检查输入是否是数学方程。我正在寻找一个正则表达式来匹配类似3 * x ^(4 * y)+ 1-(7 * y * z/x)的东西。Python数学正则表达式
回答
我正在寻找一个正则表达式匹配类似
3*x^(4*y)+1-(7*y*z/x)
。
你不能有一个匹配的字符串,如正则表达式 “3 *的x ^(4 * Y)...”。平衡括号的语言只是而不是regular。
(实际上,是Python特定的正则表达式时,上面是一个谎言。不过,虽然,我会声称,正则表达式将是这个任务的错误的工具。)
我有功能解析数学...
如果你有一个解析器,我建议你只是尝试分析它,并说true
如果它成功,否则false
。
您需要使用实际的表达式分析器。这是一个关于表达的问题在Python解析:
这里是最好的答案的链接:
你不能做你想用正则表达式是什么,它不是一种常规的语言。 Python有扩展,你可以滥用做你想做的事情,但它将是不可维护的,并不会让你得到任何关于使用解析器。
你想要的是一个解析器,一个非常易于使用的Python库被称为pyparsing。
这里是一个相关的answer with a pyparsing example。
+1,很好的回答:-) – aioobe
pyparsing绝对是这里工作的正确工具。解析简单的不规则文法正是pyparsing擅长的任务。 –
对于解析数学文本,经常使用reverse polish notation。如果你用这种语法得到你的输入,那么你可以使用RPN python函数来读取它。
对于Python中的RPN解析器,this或this看起来很有前途。
如果你正在写你自己的编程语言,你可以简单地强制用户使用这个符号,并检查它不是在RPN :)
我自己喜欢RPN,但他的例子清楚地表明他想要中缀。他的例子:3 * x ^(4 * y)+ 1-(7 * y * z/x) – steveha
我不太清楚你打算如何采取这个评论。 – steveha
Twas a joke:http://www.youtube.com/watch?v=rjQtzV9IZ0Q – tylerthemiler
原来我可以使用识别字母递归函数和数字,然后当解析表达式时,比如说“x + y”,它会检查“x”和“y”是否是有效的数学运算。所以,无论何时验证表达式,如果它是一个字母或数字,它都是有效的,或者如果它是一个在任何一方都有效的东西的操作符。
- 1. 数学正则表达式表达
- 2. (教学)的JavaScript - 使用正则表达式(正则表达式)
- 3. 使用正则表达式和数学
- 4. 正则表达式:数学与编程
- 5. 数学与mod_rewrite的正则表达式
- 6. 正则表达式使用python re模块的分数数学表达式
- 7. 正则表达式模式匹配一个数学表达式
- 8. 正则表达式正则表达式正则表达式使用正则表达式,但不是与Python
- 9. 正则表达式python表达式
- 10. 使用正则表达式在java中的数学表达式?
- 11. 数学表达式的正则表达式
- 12. 使用正则表达式解析数学表达式
- 13. 使用正则表达式验证数学表达式?
- 14. 评估数学表达式与正则表达式
- 15. 正则表达式 - 分裂数学表达式
- 16. 正则表达式来验证练成像数学表达式
- 17. 正则表达式,提取数学表达式
- 18. 正则表达式匹配的数学表达式
- 19. Python的正则表达式:“喜欢”正则表达式模式?
- 20. Python正则表达式子
- 21. Python row.get(正则表达式)
- 22. Python 3.3正则表达式?
- 23. python正则表达式
- 24. Python和正则表达式
- 25. Python - 正则表达式dir
- 26. python unicode正则表达式
- 27. Python正则表达式
- 28. 正则表达式和Python
- 29. 正则表达式在Python
- 30. Python 2.6正则表达式
虽然正则表达式可能会检查这样的输入,但我怀疑你可以依靠它来验证方程。 –
不,正则表达式甚至不能*检查*如果它在语法上是正确的。 – aioobe
@aioobe:仅仅因为Python的模式不能完成任务并不意味着没有人能做到。 [很多](http://stackoverflow.com/questions/4840988/the-recognizing-power-of-modern-regexes/4843579#4843579)。你知道这个。请停止喋喋不休。 – tchrist