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

Python中如何按条件拆分数学公式减号,避免误拆列表内负号?

正则实现方案

针对你给出的公式场景,仅用正则即可完成拆分,核心逻辑是通过零宽负向断言排除方括号内的负号匹配,示例代码如下:

import re

formula = "wa(A,[-126,-123,-120,-117,-114,-111,-108,-105,-102,-99,-96,-93,-90,-87,-84,-81,-78])-B-C-D"
# 正则说明:(?<![\[,]) 匹配的运算符前不能是[或,,避免拆分列表内的负号
operands = re.split(r'(?<![\[,])[+\-*/]', formula)
print(operands)

运行后输出结果完全符合你的预期:
['wa(A,[-126,-123,-120,-117,-114,-111,-108,-105,-102,-99,-96,-93,-90,-87,-84,-81,-78])', 'B', 'C', 'D']

复杂场景手动遍历方案

如果你后续需要处理包含嵌套括号、多层列表、函数嵌套的复杂公式,正则无法覆盖所有边界情况,可使用手动遍历逻辑实现,代码示例如下:

def split_operands(formula):
    res = []
    current = []
    bracket_level = 0
    for c in formula:
        if c in '([':
            bracket_level += 1
            current.append(c)
        elif c in ')]':
            bracket_level -= 1
            current.append(c)
        elif c in '+-*/' and bracket_level == 0:
            res.append(''.join(current))
            current = []
        else:
            current.append(c)
    if current:
        res.append(''.join(current))
    return res

# 测试
formula = "wa(A,[-126,-123,-120,-117,-114,-111,-108,-105,-102,-99,-96,-93,-90,-87,-84,-81,-78])-B-C-D"
print(split_operands(formula))

该方案支持任意层级的括号嵌套,适配性更强。

内容的提问来源于stack exchange,提问作者Ramachandra Sai

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 07:57:02