首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将表达式字符串拆分为Python中的列表?

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

Stack Overflow用户
提问于 2019-12-21 11:07:32
回答 1查看 461关注 0票数 3

我对Python很陌生,我正在尝试创建某种计算器,它将表达式读入字符串并计算它们(不带eval)。为了做到这一点,在将字符串转换为由括号、运算符和值分隔的列表之后,我正在处理一个列表。我也有一个包含操作符的列表,我只是不知道如何在regex拆分中使用它,所以直到现在我才手动完成这个操作。

我的代码有三个问题:

  1. 代码不能正确分割负数。
  2. 代码不允许添加运算符(例如--如果我将来想将_作为一个新运算符添加,代码将不知道按照它进行拆分)。
  3. 代码以字符串的形式返回数字,然后我将其转换为外部函数中的整数。
代码语言:javascript
复制
    # 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] -> I当前获得:['5', '-', '-', '5']

另一个例子:我想要得到的((500-4)*-3) ->:['(', '(', 500, '-', '4', ')', *', '-3', ')']

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-12-21 12:31:26

这里有一段路要走:

代码语言:javascript
复制
import re

arr = [
    '5--5',
    '((500-4)*-3)',
]

for s in arr:
    res = re.findall(r'\b-\b|-?\d+|\D', s)
    print res

输出:

代码语言:javascript
复制
['5', '-', '-5']
['(', '(', '500', '-', '4', ')', '*', '-3', ')']

演示和解释

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59435628

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档