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

如何将数学公式字符串拆分为由各独立元素组成的数组

公式字符串拆分实现方案

这类拆分本质是简单的词法标记(Token)拆分,核心逻辑是按字符类型分组,把连续的同类型字符(字母/数字)合并为一个标记,单独的符号类字符直接作为独立标记即可。


实现思路

  • 先定义需要识别的单字符符号列表:=, +, -, *, (, ),这类字符每个都单独作为一个拆分项
  • 连续的字母字符(a-z/A-Z)合并为一个标识符项
  • 连续的数字字符合并为一个数值项
  • 遍历字符串逐个字符判断类型,遇到类型切换时就把之前缓存的连续字符存入结果数组,重置缓存继续处理

代码实现示例

完整逻辑实现(JavaScript,可扩展)

适合后续需要新增识别规则(比如支持小数、下划线变量、多字符运算符等)的场景:

function splitFormula(formulaStr) {
  const result = [];
  let currentToken = '';
  // 定义单字符符号集合
  const symbols = new Set(['=', '+', '-', '*', '(', ')']);

  for (const char of formulaStr) {
    if (symbols.has(char)) {
      // 遇到符号,先把之前攒的非符号token存入结果
      if (currentToken) {
        result.push(currentToken);
        currentToken = '';
      }
      // 符号本身作为单独token存入
      result.push(char);
    } else if (/[a-zA-Z]/.test(char)) {
      // 当前是字母,如果之前攒的是数字,先把数字存了
      if (currentToken && /\d/.test(currentToken[0])) {
        result.push(currentToken);
        currentToken = '';
      }
      currentToken += char;
    } else if (/\d/.test(char)) {
      // 当前是数字,如果之前攒的是字母,先把字母存了
      if (currentToken && /[a-zA-Z]/.test(currentToken[0])) {
        result.push(currentToken);
        currentToken = '';
      }
      currentToken += char;
    }
    // 如果公式包含空格,可在这里加判断直接跳过空格字符
  }

  // 遍历结束后把最后剩下的token存入
  if (currentToken) {
    result.push(currentToken);
  }

  return result;
}

// 测试
const formula = "formula=today+Buy+yes-(25*2)-3";
console.log(splitFormula(formula)); 
// 输出:["formula","=","today","+","Buy","+","yes","-","(","25","*","2",")","-","3"]

正则简化实现

如果不需要复杂扩展,直接用正则匹配即可快速实现效果:

const formula = "formula=today+Buy+yes-(25*2)-3";
const result = formula.match(/[a-zA-Z]+|\d+|[=+*()-]/g);

正则解释:匹配连续字母、连续数字、或者指定的单个符号,g修饰符表示全局匹配所有符合规则的片段。


其他语言适配逻辑

不管用什么语言实现,核心逻辑完全一致:

  • 遍历字符判断所属类型
  • 同类型连续字符拼接,不同类型切换时完成一次token存储
  • 需要支持更复杂的公式规则时,只需要对应调整类型判断规则和符号列表即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 03:03:02