如何在Python中将表达式字符串拆分为列表?

3
我是新手,想用Python创建一个计算器,通过读取字符串表达式并计算它们来实现(不使用eval)。为此,我将字符串转换为由括号、运算符和值分隔的列表,然后使用列表进行操作。我有一个包含运算符的列表,但我不知道如何在正则表达式中使用它进行分割,因此到目前为止,我都是手动进行操作。
我的代码有3个问题: 1. 代码无法正确分割负数。 2. 代码无法添加运算符(例如,如果我想在未来添加“_”作为新运算符,则代码将无法根据它进行分割)。 3. 代码返回数字字符串,我需要在外部函数中将其转换为整数。
    # Removing any unwanted white spaces, tabs, or new lines from the equation string:
    equation = re.sub(r"[\n\t\s]*", "", equation)
    # Creating a list based on the equation string:
    result_list = re.split(r'([-+*/^~%!@$&()])|\s+', equation)
    # Filtering the list - Removing all the unwanted "spaces" from the list:
    result_list = [value for value in result_list if value not in ['', ' ', '\t']]

例如: 5--5 -> 我希望得到: [5, '-', -5] -> 目前我得到的是: ['5', '-', '-', '5'] 另一个例子: ((500-4)*-3) -> 我希望得到:['(', '(', 500, '-', '4', ')', *', '-3', ')']

我认为,你应该为你的计算器设置一些规则。 - ruslan_krivoshein
计算器的主要思想是让下一个程序员更容易地更改和添加运算符,因此我正在尽可能地创建它“干净”。 - RnadomG
首先尝试创建一个更严格的版本,然后再使其更易于使用和多功能化。 - ruslan_krivoshein
我已经做到了,计算器的其他功能都运行得非常好,现在我只剩下找到正确将字符串分离成列表的方法。 - RnadomG
你可以通过仅在运算符(例如 +-)前面跟随数字时拆分来处理它们,即使用正向后查找 (?<=\d) 来限定拆分。 - Nick
1个回答

2

以下是一种方法:

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
@RnadomG:如果没有修改应该可以使用 + 运行。 如果你无法使其工作,请编辑您的问题并添加更多测试案例。 - Toto

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接