You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用栈做括号匹配时无空格表达式如何正确拆分存入列表

无空格算术表达式拆分解决方案

你需要实现的是算术表达式的分词(Tokenize)逻辑,核心是将连续的多位数字识别为一个整体,其余运算符、括号作为单独元素拆分。

方法1:手动遍历实现

逻辑清晰无第三方依赖,适合后续自定义扩展规则:

def tokenize(exp):
    # 先移除所有空格,同时兼容带空格的输入
    exp = exp.replace(' ', '')
    res = []
    num_buf = ''
    for c in exp:
        if c.isdigit():
            num_buf += c
        else:
            # 遇到非数字字符,先把之前累积的数字存入结果
            if num_buf:
                res.append(num_buf)
                num_buf = ''
            res.append(c)
    # 遍历结束后检查末尾是否有剩余的数字未存入
    if num_buf:
        res.append(num_buf)
    return res

# 测试用例
exp = "(2*3)+(4*60)/3"
print(tokenize(exp))
# 输出:['(', '2', '*', '3', ')', '+', '(', '4', '*', '60', ')', '/', '3']

方法2:正则表达式快速实现

用正则匹配规则直接拆分,代码更简洁:

import re

def tokenize(exp):
    # 先移除所有空格,匹配规则:连续数字 或 任意非数字字符
    exp = exp.replace(' ', '')
    return re.findall(r'\d+|[^\d]', exp)

# 测试用例
exp = "2*3+11+2"
print(tokenize(exp))
# 输出:['2', '*', '3', '+', '11', '+', '2']

两种方法都同时兼容带空格和不带空格的输入,不需要单独区分处理两种输入场景,拆分后的结果可以直接用于后续的括号校验、表达式计算逻辑。

内容的提问来源于stack exchange,提问作者Pallab Tewary

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.12 13:48:02