Python:使用正则表达式来解决数学表达式

时间:2015-12-08 12:05:26

标签: python regex python-2.7

我想知道是否可以使用正则表达式来解决带有实数的简单数学表达式,以及运算符+, - ,*,/和^。

例如,输入将是一个类似于' 3.5 + 4 ^ 2' (这也可以写成' + 3.5 + 4 ^ 2')和输出19.5。我的想法是让正则表达式首先将^识别为首先执行的过程。因此,他将采用4 ^ 2并返回16,因此表达式将是' 3.5 + 16'。然后它会识别+并返回19.5。

另一个输入示例是-4 + 5.5 * 4/2 - > -4 + 22/2 - > -4 + 11 - > 7

4 个答案:

答案 0 :(得分:2)

正则表达式描述了字符串上的模式,它们无法分析整数/浮点数。除非有一个非常模糊的黑客使其工作(我认为不太可能)。

您可以验证给定字符串是否是有效的数学表达式,但不能使用正则表达式来计算数学表达式。

答案 1 :(得分:2)

正则表达式匹配,它们无法计算。因此,使用正则表达式匹配您的字符串是完全正确的,类似于

>>> re.match(r'^(?P<n>[0-9]+)(?P<op>[-+\*/])(?P<rest>.+)$', '1+2+3').groupdict()
{'n': '1', 'op': '+', 'rest': '2+3'}

然而,实际计算最好在Python本身中执行。

答案 2 :(得分:0)

您可以eval执行此操作 ^可以替换**以获得正确的公式。

>>> eval('3.5+4^2'.replace('^', '**'))
19.5
>>> eval('-4+5.5*4/2')
7.0

答案 3 :(得分:0)

你应该使用一个着名的符号,波兰符号wiki page

正则表达式不会给你很多帮助,因为正则表达式使用graphs而你想要的计算线的解释会使用Threes。

您可能对三种,孩子,叶子,旋转......行为感兴趣。 这非常像一个scool case,使用波兰语表示法,并且使用三个结构,你将使这个读取你的行从左到右依次顺序没有正则表达式