我想用乘数分割长数学方程。 表达式以字符串形式给出,允许使用空格。
例如:
"((a*b>0) * (e>500)) * (abs(j)>2.0) * (n>1)"
应该返回:
['a*b>0', 'e>500', 'abs(j)>2.0', 'n>1']
如果使用除法,事情变得更加复杂,但我们假设开始时没有划分。什么是解决这个问题的最pythonic方式?
答案 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)