将中缀表达式转换为列表

Convert Infix expression to list

我想将中缀表达式转换为列表,以便双位数或字符被视为单个操作数,即 28*35/(21-13) 应该导致 ['28', '*', '35', '/', '(', '21', '-', '13', ')']

这是我编写的代码,它运行良好,但我想知道是否有更聪明的方法来完成它,比如列表理解或其他东西

expression = "28*35/(21-13)"
expression.replace(' ', '') # replace spaces if any
expressionList = []
operand = ""
for char in expression:
    if char in "+-*/()":
        if operand != '':
            expressionList.append(operand)
            operand = ''
        expressionList.append(char)
    else:
        operand += char

您不能使用 list-comprehension,因为需要知道前一个元素才能拆分内容。我看到的更简单的解决方案是使用 regex

这里(\d+|[-+()/*])表示

  • \d+ 任何一组数字,或(竖线是 OR |
  • -+()/*
  • 中的任何字符
import re

expression = "28*35/(21-13)"
values = re.findall(r"(\d+|[-+()/*])", expression) 
print(values) # ['28', '*', '35', '/', '(', '21', '-', '13', ')']

添加字母:"([A-Z]+|\d+|[-+()/*])"