如何通过乘数分割任意数学表达式

时间:2017-08-04 15:14:42

标签: python string split symbolic-math

我想用乘数分割长数学方程。 表达式以字符串形式给出,允许使用空格。

例如:

"((a*b>0) * (e>500)) * (abs(j)>2.0) * (n>1)"

应该返回:

['a*b>0', 'e>500', 'abs(j)>2.0', 'n>1']

如果使用除法,事情变得更加复杂,但我们假设开始时没有划分。什么是解决这个问题的最pythonic方式?

3 个答案:

答案 0 :(得分:1)

import re

string = "((a-b>0) * (e + 10>500)) * (abs(j)>2.0) * (n>1)"
signals = {'+','*','/','-'}

###
##

def splitString(string):

    arr_equations = re.split(''([\)]+(\*|\-|\+|\/)+[\(])'',string.replace(" ", ""))

    new_array = []

    for each_equa in arr_equations:

        each_equa = each_equa.strip("()")

        if (not(each_equa in signals)):
            new_array.append(each_equa)

    return new_array

###
##    

print(splitString(string))

答案 1 :(得分:0)

您只需使用split()功能:

ans_list = your_string.split(" * ")

注意乘数符号周围的空格。这假设您的字符串完全如您所说。

答案 2 :(得分:0)

你可以使用正则表达式:

s = "((a*b>0) * (e>500)) * (abs(j)>2.0) * (n>1)"
s = ''.join(s.split())
s = re.split(r'([\)]+[\*\+\-/\^]+[\(])', s)
res = []
for x in s:
    x = re.sub(r'(^[\(\)\*\+\-\/]+)', '', x)
    x = re.sub(r'([\(\)]+$)', '', x)
    if len(x) > 0: res.append(x)
print(res)