小数或分数的正则表达式模式

时间:2015-04-10 16:53:29

标签: c# regex

我对正则表达式模式很糟糕。我试图以整数(1234),十进制(1234.50)或分数(1234 1/2)的形式验证输入(使用C#)。我目前正在使用这种模式

  

[^ 0-9。] +

仅处理整数和小数。有没有办法可以扩展它来处理分数?

3 个答案:

答案 0 :(得分:3)

您可以使用这样的正则表达式:

^\(\d+(?:\.?\d*|\s\d+\/\d+)\)$

<强> Working demo

如果您不想包含括号,可以使用

^\d+(?:\.?\d*|\s\d+\/\d+)$

您可以轻松查看小数/分数模式:

Regular expression visualization

答案 1 :(得分:0)

如果您只是想要验证字符串并将输入存储为string,则可以使用正则表达式。但是,如果您要对数值进行任何操作,那么最好只是尝试直接解析该值。

string input = "1234 1/2";
decimal? inputAsDec = null;
decimal? fractionAsDec = null;
var wholeAndFraction = input.Split(' ');

if (wholeAndFraction.Count == 2 && input.Contains('/'))
{
    var fraction = wholeAndFraction[1].Split('/');
    decimal? numerator = null;
    decimal? denominator = null;

    if (decimal.TryParse(fraction[0], out numerator) && decimal.TryParse(fraction[1], out denominator))
    {
        fractionAsDec = numerator / denominator;
    }
}

if (decimal.TryParse(wholeAndFraction[0], out inputAsDec))
{
    if (fractionAsDec != null)
    {
        inputAsDec += fractionAsDec;
    }
}

答案 2 :(得分:-1)

这应该有效:

\d*(?:\s+\d+/\d+|\.\d+)?