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

C#中验证数学公式的正则表达式问题求助

解决C#中简单数学等式的正则验证问题

问题根源

你当前的正则表达式之所以会匹配-22.22*这类无效格式,是因为数字部分的定义过于宽松:(\d){0,}(.\d{0,})?允许空内容(0个数字+可选的空小数部分),导致运算符后面没有实际数字也能被匹配。

修正后的正则表达式

^-?(?:\d+(?:\.\d+)?|\.\d+)(?:[-+/*]-?(?:\d+(?:\.\d+)?|\.\d+))+$

正则各部分解释

  • ^:匹配字符串起始位置
  • -?:可选的负号,支持正负数字
  • (?:\d+(?:\.\d+)?|\.\d+):非捕获组,定义合法的数字格式:
    • \d+(?:\.\d+)?:匹配整数(如123)或带小数点的小数(如123.45)
    • |\.\d+:匹配前导小数(如.08)
  • (?:[-+/*]-?(?:\d+(?:\.\d+)?|\.\d+))+:非捕获组,要求至少重复1次“运算符+合法数字”的组合:
    • [-+/*]:匹配四则运算符
    • 后续的数字规则与开头一致,支持带负号的数字
  • $:匹配字符串结束位置

C# 代码示例

using System.Text.RegularExpressions;

// 正则模式
var equationPattern = @"^-?(?:\d+(?:\.\d+)?|\.\d+)(?:[-+/*]-?(?:\d+(?:\.\d+)?|\.\d+))+$";

// 测试有效等式
var validEquation = "-100.01/200*-3+4000000.8688--.742";
bool isEquationValid = Regex.IsMatch(validEquation, equationPattern);
// 结果:true

// 测试无效等式
var invalidEquation = "-22.22*";
isEquationValid = Regex.IsMatch(invalidEquation, equationPattern);
// 结果:false

验证效果

  • 有效示例全部可以匹配
  • 无效示例如1+(运算符后无数字)、88..88+77..77(多小数点)均无法匹配

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 20:42:56