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

如何用正则表达式匹配算术表达式中的多词变量(排除运算符与数字)

正则表达式解决方案

需求1:匹配包含数字在内的所有目标内容

针对示例表达式(Car speed / Road-congestion Time) + 100,要匹配得到Car speed、Road-congestion Time、100,可使用以下正则:

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

正则说明

  • (?<![^\s+*/()]):前置断言,确保匹配内容的前导是运算符(+*/())、空格或字符串开头,避免把变量内的连字符误判为分隔符
  • [^+*/()\s]:匹配第一个非运算符、非空格的字符,直接排除空匹配的可能
  • (?:[^+*/()]*[^+*/()\s])?:可选匹配后续的非运算符字符,最终以非空格、非运算符字符结尾,避免捕获多余的尾随空格
  • (?![^\s+*/()]):后置断言,确保匹配内容的后续是运算符(+*/())、空格或字符串结尾,同样避免误判变量内的连字符

需求2:仅匹配变量,忽略数字

如果需要排除纯数字(仅得到Car speed、Road-congestion Time),可在上述正则基础上添加纯数字排除逻辑:

(?<![^\s+*/()])(?!\d+(?:\.\d+)?$)[^+*/()\s](?:[^+*/()]*[^+*/()\s])?(?![^\s+*/()])

新增逻辑说明

  • (?!\d+(?:\.\d+)?$):负向预查,确保当前匹配的内容不是纯整数或小数,从而过滤掉数字类匹配结果

原正则问题分析

你之前使用的[+-\*\/()]?([^+-\*\/()]*)[+-\*\/()]?存在两个核心问题:

  1. 由于运算符部分是可选的,会匹配到表达式首尾或运算符之间的空内容,导致出现空匹配
  2. 将所有减号(包括变量内的连字符)都当作分隔符,无法区分作为运算符的减号(前后带空格)和变量内的连字符(无空格)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 16:40:09