【问题标题】: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]);

【问题讨论】:

    标签: c# .net regex split expression


    【解决方案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.]+"));
    

    本质上是说递归地匹配除数字或点字符之外的任何内容,并按该匹配项进行分割。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-25
      相关资源
      最近更新 更多