如何正则表达式拆分表达式以接受十进制数?
Posted
技术标签:
【中文标题】如何正则表达式拆分表达式以接受十进制数?【英文标题】:How to Regex Split an expression to accept decimal number? 【发布时间】:2020-01-28 18:46:41 【问题描述】:我正在尝试制作一个计算器。我正在使用 Regex.Split() 从表达式中获取数字输入。它适用于非十进制数字,但现在我正在寻找一种方法来获取十进制数字输入。
string mExp = "1.50 + 2.50";
string[] strNum = (Regex.Split(mExp, @"[\D+]"));
num1 = double.Parse(strNum[0]);
num2 = double.Parse(strNum[1]);
【问题讨论】:
【参考方案1】:您可以更改您的正则表达式以拆分一些空格,然后是算术运算符,然后是空格:
string[] strNum = (Regex.Split(mExp, @"\s*[+/*-]\s*"));
Console.WriteLine(string.Join("\n", strNum));
输出:
1.50
2.50
Demo on rextester
要处理负数,您必须使正则表达式更复杂一些,并为数字添加后向搜索和对数字或-
的前瞻:
string mExp = "-1.50 + 2.50 -3.0 + -1";
string[] strNum = (Regex.Split(mExp, @"(?<=\d)\s*[+*/-]\s*(?=-|\d)"));
Console.WriteLine(string.Join("\n", strNum));
输出:
-1.50
2.50
3.0
-1
Demo on rextester
【讨论】:
如果我也想接受负数呢?【参考方案2】:您可以使用以下正则表达式来拆分非十进制数和十进制数:
[^\d.]+
Regex Demo
string[] strNum = (Regex.Split(mExp, @"[^\d.]+"));
本质上是说递归地匹配除数字或点字符之外的任何内容,并按该匹配项进行分割。
【讨论】:
以上是关于如何正则表达式拆分表达式以接受十进制数?的主要内容,如果未能解决你的问题,请参考以下文章