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

如何使用Regex.Split分割表达式以提取十进制数字?

解决Regex.Split提取十进制数字的问题

嘿,我懂你遇到的麻烦了——原来的正则表达式[\D+]会把小数点当成非数字字符,直接把十进制数拆成好几段,比如"1.50"会被拆成["1", "50"],这肯定没法正确Parse成double类型对吧?

这里给你两个靠谱的解决方案:

方案1:调整拆分的正则表达式

与其匹配所有非数字字符,不如直接匹配表达式里的运算符(比如+、-、*、/)以及周围的空格作为分隔符,这样拆分出来的就是完整的数字(包括十进制):

string mExp = "1.50 + 2.50";
// 匹配运算符和前后的空格作为分隔符,支持加减乘除
string[] strNum = Regex.Split(mExp, @"\s*[+\-*/]\s*");
double num1 = double.Parse(strNum[0]);
double num2 = double.Parse(strNum[1]);

这个正则里的\s*用来匹配运算符前后可能存在的空格,[+\-*/]则匹配所有常见的算术运算符,这样拆分后的数组就只会包含完整的数字字符串了。

方案2:用Regex.Matches直接提取数字(更灵活)

如果你的计算器以后要处理更复杂的表达式(比如多运算符、负数),直接提取所有符合数字格式的内容会更可靠。用Regex.Matches可以一次性把所有整数和十进制数字都捞出来:

string mExp = "1.50 + 2.50";
// 匹配正负整数、十进制数,支持像 "-1.5"、".5"、"3." 这样的格式
MatchCollection matches = Regex.Matches(mExp, @"[-+]?\d+\.?\d*|\d*\.?\d+");
double num1 = double.Parse(matches[0].Value);
double num2 = double.Parse(matches[1].Value);

给你解释下这个正则的逻辑:

  • [-+]?:可选的正负号,支持负数或正数的符号标注
  • \d+\.?\d*:匹配有整数部分的数字(比如"1.50"、"2")
  • |\d*\.?\d+:匹配没有整数部分的小数(比如".5")或者只有小数点的数字(比如"3.")

这样不管表达式里的数字是什么格式,都能被正确提取出来。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:06:10