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

如何用正则表达式实现数学方程分词?现有方案存在三类问题

数学方程正则分词优化方案

需求说明

输入示例:

-cos(x)+4ln(x^2.2)^4=-2(pi+x)

期望输出:

-cos
(
x
)
+
4
*
ln
(
x
^
2.2
)
^
4
=
-2
(
pi
+
x
)

现有正则问题

你当前使用的正则:

\s*(?:([()^+*\/-])|([a-z]+)|((?:\.[0-9]+|[0-9]+(?:\.[0-9]*)?)(?:e[+-]?[0-9]+)?)|(\S))

存在以下问题:

  • 数字与函数/变量之间缺失乘号(*)
  • 数字/变量与左括号之间缺失乘号(*)
  • 数字/变量/函数与负号(-)未合并为同一分词单元

优化后的正则方案

针对上述问题,调整正则逻辑如下:

(?<![\d\w)])-([a-z]+|\d+(?:\.\d*)?|\.\d+)(?:[eE][+-]?\d+)?|(\d+(?:\.\d*)?|\.\d+)(?:[eE][+-]?\d+)?(?=[a-z(])|([()^+*/=])|([a-z]+)|(\d+(?:\.\d*)?|\.\d+)(?:[eE][+-]?\d+)?

正则逻辑拆解

  1. 带负号的单元:匹配开头或非数字/字母/右括号后的负号,将负号与后续的函数名、数字(含小数、科学计数法)合并为一个单元,比如-cos、-2。
  2. 乘号插入场景:匹配数字后紧跟函数名或左括号的情况,后续处理时在数字后追加*。
  3. 独立运算符:单独拆分括号、幂、加减乘除、等号这些符号,每个符号单独成词。
  4. 函数/变量:匹配单独的函数名或变量,比如ln、x、pi。
  5. 独立数字:匹配不跟函数或左括号的数字。

分词处理逻辑

拿到正则匹配结果后按以下规则输出:

  • 若匹配到“数字后跟函数/左括号”的组,先输出数字,再单独输出*。
  • 其他匹配结果直接输出,每个结果占一行。

按此处理输入示例,即可得到你期望的分词效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 23:06:32