我想知道是否可以使用正则表达式来解决带有实数的简单数学表达式,以及运算符+, - ,*,/和^。
例如,输入将是一个类似于' 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
答案 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)