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

Golang正则表达式拆分数学公式:需求及现有方案问题

解决数学公式拆分问题

问题分析

直接用 (\+|-|\*|\/) 拆分公式 1-(a+b-b-d)*100 时,会把括号内的 +、- 也当成分隔符,导致拆分出错误的片段。核心原因是没有区分最外层运算符和括号内的运算符。

解决方案

使用正则表达式匹配不在括号内的最外层运算符,以此作为拆分依据:

正则表达式

(?<!\([^()]*)([+\-*/])(?![^()]*\))

规则解释

  • (?<!\([^()]*):负向预查,确保运算符前面不是左括号开头的未闭合括号内容
  • ([+\-*/]):匹配加减乘除运算符(转义 - 避免与范围符混淆)
  • (?![^()]*\)):负向预查,确保运算符后面不是未闭合括号内容结尾的右括号

拆分步骤

  1. 用上述正则对公式 1-(a+b-b-d)*100 进行拆分,得到三个片段:1、(a+b-b-d)、100
  2. 对第二个片段去除首尾括号,得到目标内容 a+b-b-d

示例代码(Python)

import re

formula = "1-(a+b-b-d)*100"
# 匹配最外层运算符作为分隔符
split_parts = re.split(r'(?<!\([^()]*)([+\-*/])(?![^()]*\))', formula)
# 提取有效片段:split_parts会包含分隔符,所以取索引0、2、4
result = [split_parts[0], split_parts[2].strip('()'), split_parts[4]]
print(result)  # 输出: ['1', 'a+b-b-d', '100']

内容的提问来源于stack exchange,提问作者Lihua Lin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 07:09:20