我已经编写了用于识别float和int的正则表达式,但是它们似乎不起作用(下面的代码)。

{
    string sumstring = "12.098";

    Regex flt = new Regex(@" ^[0-9]*(\.[0-9]*)");
    Regex ent = new Regex("^[0-9]+");

    if (d_type.IsMatch(sumstring))
    {
        Console.WriteLine(sumstring + " " + "dtype");
    }

    Match m = ent.Match(sumstring);

    if (m.Success)
    {
        Console.WriteLine("int");
    }
    else if (flt.IsMatch(sumstring))
    {
        Console.WriteLine("float");
    }
}


错误在哪里?

最佳答案

首先,我不认为正则表达式确实是完成这项工作的最佳工具。我只是使用Double.TryParse()Int32.TryParse()函数。

其次,您的正则表达式缺少很多测试用例:


整数


5(发现)
+5(未覆盖)
-5(不包括在内)




5.0(发现)
+5.0(未涵盖)
-5.0(未涵盖)
5.0E5(未涵盖)
5.0E + 5(未涵盖)
5.0E-5(未涵盖)
+ 5.0E5(未涵盖)
+ 5.0E + 5(未涵盖)
+ 5.0E-5(未涵盖)
-5.0E5(未涵盖)
-5.0E + 5(未涵盖)
-5.0E-5(未涵盖)

边缘案例


2 ^ 32 + 1(即使看起来像Integer,也应识别为Double)



通过使用该库,而不是手动滚动一个正则表达式,可以立即覆盖所有这些(可能不包括边缘情况)。

关于c# - 正则表达式无法区分浮点数和整数类型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1007902/

10-10 22:28