Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Python中将表达式字符串拆分为列表?_Python_Regex - Fatal编程技术网

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

如何在Python中将表达式字符串拆分为列表?,python,regex,Python,Regex,我是Python新手,我正在尝试创建某种计算器,将表达式读取为字符串并进行计算(不使用eval)。为了做到这一点,在将字符串转换为由括号、运算符和值分隔的列表之后,我正在处理一个列表。 我也有一个包含操作符的列表,我只是不知道如何在正则表达式拆分中使用它,所以直到现在我都是手动完成的 我的代码有3个问题: 代码没有正确拆分负数 代码不允许添加运算符(在示例中-如果我想在将来添加\uuu作为新运算符,代码将不知道如何根据它进行拆分) 代码以字符串的形式返回数字,然后在外部函数中将其转换为整数 例如

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

我的代码有3个问题:

  • 代码没有正确拆分负数
  • 代码不允许添加运算符(在示例中-如果我想在将来添加
    \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', ')']