Golang正则表达式拆分数学公式:需求及现有方案问题
解决数学公式拆分问题
问题分析
直接用 (\+|-|\*|\/) 拆分公式 1-(a+b-b-d)*100 时,会把括号内的 +、- 也当成分隔符,导致拆分出错误的片段。核心原因是没有区分最外层运算符和括号内的运算符。
解决方案
使用正则表达式匹配不在括号内的最外层运算符,以此作为拆分依据:
正则表达式
(?<!\([^()]*)([+\-*/])(?![^()]*\))
规则解释
(?<!\([^()]*):负向预查,确保运算符前面不是左括号开头的未闭合括号内容([+\-*/]):匹配加减乘除运算符(转义-避免与范围符混淆)(?![^()]*\)):负向预查,确保运算符后面不是未闭合括号内容结尾的右括号
拆分步骤
- 用上述正则对公式
1-(a+b-b-d)*100进行拆分,得到三个片段:1、(a+b-b-d)、100 - 对第二个片段去除首尾括号,得到目标内容
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
相关产品推荐
相关产品推荐

