如何在Python中将表达式字符串拆分为列表?
我是Python新手,我正在尝试创建某种计算器,将表达式读取为字符串并进行计算(不使用eval)。为了做到这一点,在将字符串转换为由括号、运算符和值分隔的列表之后,我正在处理一个列表。 我也有一个包含操作符的列表,我只是不知道如何在正则表达式拆分中使用它,所以直到现在我都是手动完成的 我的代码有3个问题:如何在Python中将表达式字符串拆分为列表?,python,regex,Python,Regex,我是Python新手,我正在尝试创建某种计算器,将表达式读取为字符串并进行计算(不使用eval)。为了做到这一点,在将字符串转换为由括号、运算符和值分隔的列表之后,我正在处理一个列表。 我也有一个包含操作符的列表,我只是不知道如何在正则表达式拆分中使用它,所以直到现在我都是手动完成的 我的代码有3个问题: 代码没有正确拆分负数 代码不允许添加运算符(在示例中-如果我想在将来添加\uuu作为新运算符,代码将不知道如何根据它进行拆分) 代码以字符串的形式返回数字,然后在外部函数中将其转换为整数 例如
\uuu
作为新运算符,代码将不知道如何根据它进行拆分)5--5
->我想得到:[5',-',-5]
->我现在得到:[5',-',-',-',5']
另一个例子:((500-4)*-3)
->我想得到:['(','(',500',-','4','),*','-3',')]
这里有一条路要走:
import re
arr = [
'5--5',
'((500-4)*-3)',
]
for s in arr:
res = re.findall(r'\b-\b|-?\d+|\D', s)
print res
输出:
['5', '-', '-5']
['(', '(', '500', '-', '4', ')', '*', '-3', ')']
我认为,您应该为您的计算器设置一些规则。计算器的主要思想是,下一个程序员很容易更改和添加运算符,因此我尝试将其创建为“干净”作为一种可能的方法,首先创建一个更严格的,然后使它更容易和多功能)我已经这样做了,并且计算器的其余功能工作得非常好,现在我只剩下找到一种方法来正确地将字符串分隔成一个列表。您可以处理运算符(例如,
+
,-
)只有在前面有数字时才进行拆分,即使用正向查找(?非常感谢,它工作得很好。有没有办法在这个正则表达式中也处理+?(例如,将+5作为“5”接收)@RnadomG:它应该可以与+
一起工作,而不需要修改。如果您不能使它工作,请编辑您的问题并添加更多的测试用例。
['5', '-', '-5']
['(', '(', '500', '-', '4', ')', '*', '-3', ')']