正则表达式匹配数字或特定字符串(即“所有”)

时间:2010-03-19 17:26:39

标签: .net regex

这听起来很简单,但我的正则表达式知识有限。

我需要一个表达式来匹配十进制数字或字符串“all”,就像在范围验证器中一样,它允许单词all表示最大范围。

我觉得这样的事情可能有用:

((^[-+]?\d*\.?\d*)|any)

但上述内容对“任何”都不起作用。

3 个答案:

答案 0 :(得分:2)

这是一个不使用正则表达式的解决方案。

private static bool IsNumberOrGivenString(string number, string text, CultureInfo culture)
{
    double result;
    if (double.TryParse(number, NumberStyles.Float, culture, out result))
    {
        return true;
    }

    return number.Equals(text, StringComparison.OrdinalIgnoreCase);
}

private static bool IsNumberOrGivenString(string number, string text)
{
    return IsNumberOrGivenString(number, text, CultureInfo.InvariantCulture);
}

样品使用:

Console.WriteLine(IsNumberOrGivenString("898", "all")); // true
Console.WriteLine(IsNumberOrGivenString("all", "all")); // true
Console.WriteLine(IsNumberOrGivenString("whatever", "all")); // false
Console.WriteLine(IsNumberOrGivenString("898,0", "all", CultureInfo.GetCultureInfo("sv-SE"))); // true
Console.WriteLine(IsNumberOrGivenString("898,0", "all", CultureInfo.GetCultureInfo("en-US"))); // false

使用正则表达式使用此代码的优势在于它(可能)以本地化方式运行,使用任何使用的十进制符号。如果该字符不是有效的小数分隔符,如果它具有.,它也将失败。

由于字符串比较忽略大小写,它也将匹配单词“all”,无论它是“all”,“All”,“aLl”还是大写和小写字母的任何其他组合。

答案 1 :(得分:1)

试试这个

(((-|\+)?\d+\.?\d*)|any)

答案 2 :(得分:1)

使用|,正则表达式引擎可能会逐个检查每种可能性,如果找到匹配则立即返回。

自子表达式

(^[-+]?\d*\.?\d*)

匹配空字符串,|的LHS将始终成功,因此any部分将始终被忽略。

你应该让这部分匹配一个空字符串,例如

(^[-+]?(?:\d+\.?\d*|\.\d+))