如何使用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
相关产品推荐
相关产品推荐

