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

如何在C#中用正则正确分离含负数的数字与数学运算符

问题:C#正则拆分数字(含负数)与运算符列表

需求说明

将输入字符串拆分为两个列表:

  • 一个列表存储包含负数的数字,例如字符串"-9+9+8"需拆分为["-9", "9", "8"]
  • 另一个列表存储数学运算符,对应上面的例子需得到["+", "+"]

注:括号由单独函数处理,暂不纳入本次处理范围

最初尝试代码

使用Regex.Split和Regex.Matches实现,但无法正确处理负数场景:

List<string> textSplit = Regex.Split(input, "[*/+-]").ToList();
List<string> operators = Regex.Matches(input, "[*/+-]")
                              .Cast<Match>()
                              .Select(m => m.Value).ToList();

遇到的问题

处理"8--4"这类包含连续负号的字符串时,结果不符合预期:

  • 错误输出:数字列表为["8", "", "4"],运算符列表为["-", "-"]
  • 预期输出:数字列表为["8", "-4"],运算符列表为["-"]

中间尝试方案(存在不足)

使用以下正则表达式进行匹配:

  • 数字匹配正则:(?<=[-+\/*])-?\d|^\d
  • 运算符匹配正则:(?<=\d)[-+\/*]

处理字符串"-5+8*2/4--6"时:

  • 运算符提取结果正确:["+", "*", "/", "-"]
  • 数字提取结果不符合预期:["5", "8", "2", "4", "-6"](预期应为["-5", "8", "2", "4", "-6"])

问题解决

借鉴了Keszas的部分解决方案后,问题已解决。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 04:20:27