3

我创建了一个正则表达式来匹配从 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";
}
4

4 回答 4

9

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

所有你需要的是

string pattern = @"^([1-9][0-9]{0,1}(\.[\d]{1,2})?|100)$";
于 2013-07-09T20:32:55.467 回答
4

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

@"^([1-9][0-9]{0,1}(\.[\d]{1,2})?|100)$";
于 2013-07-09T20:33:13.483 回答
2

只是扮演魔鬼的拥护者 - 非正则表达式解决方案是:

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

并且为了很好地衡量 Jamie Zawinski 的名言:

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

于 2013-07-09T20:39:53.740 回答
0

您的代码同时捕获了数字 xx.xx 和 .xx。如果您希望它仅在第二个括号中插入 ?: 时捕获该数字。

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

顺便说一句,测试正则表达式的好方法是像http://rubular.com/这样的网站 ,您可以在其中立即看到结果。

于 2013-07-09T20:37:06.293 回答