C#RegEx适用于100以内的数字

本文关键字:数字 适用于 C#RegEx | 更新日期: 2023-09-27 18:21:47

我创建了一个正则表达式来匹配1-100之间的数字,包括50.25 等小数

由于某种原因,十进制数字不匹配,我不知道为什么。

有人能帮忙吗?

string pattern = @"^([1-9][0-9]{0,1}(''.[''d]{1,2})?|100)$";
Regex r = new Regex(pattern);
Match m = r.Match(s.SearchRadius);
if (!m.Success)
{
    s.SearchRadius = "20";
}

C#RegEx适用于100以内的数字

您在字符串上使用@符号,因此不应该转义''字符。

你只需要

string pattern = @"^([1-9][0-9]{0,1}('.['d]{1,2})?|100)$";

使用@""字符串文字时,不能转义反斜杠。您可能打算使用'.'d

@"^([1-9][0-9]{0,1}('.['d]{1,2})?|100)$";

只是扮演魔鬼代言人-非正则表达式的解决方案是:

double d;
if (!(double.TryParse(s.SearchRadius, out d) && d <= 100 && d >= 0))
{
    s.SearchRadius = "20";
}

还有杰米·扎温斯基的名言:

有些人在遇到问题时会想"我知道,我会用正则表达式。"现在他们有两个问题。

您的代码同时捕获数字xx.xx和.xx。如果您希望它只捕获一次数字,请插入?:在第二个括号中。

^([1-9][0-9]{0,1}(?:'.['d]{1,2})?|100)$

顺便说一句,测试正则表达式的一个好方法是http://rubular.com/在那里你可以马上看到结果。