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
相关产品推荐
相关产品推荐

