我根本没用过正则表达式,所以在故障排除方面遇到了困难。我想正则表达式匹配仅当包含的字符串是所有数字;但是在下面两个例子中,它匹配的是一个包含所有数字加上等号的字符串,比如“1234=4321”。我确信有一种方法可以改变这种行为,但正如我所说的,我从来没有真正使用过正则表达式。

string compare = "1234=4321";
Regex regex = new Regex(@"[\d]");

if (regex.IsMatch(compare))
{ 
    //true
}

regex = new Regex("[0-9]");

if (regex.IsMatch(compare))
{ 
    //true
}

以防万一,我使用的是c#和。net 2.0。


当前回答

虽然上述解决方案都不符合我的目的,但这对我来说很有效。

var pattern = @"^(-?[1-9]+\d*([.]\d+)?)$|^(-?0[.]\d*[1-9]+)$|^0$|^0.0$";
return Regex.Match(value, pattern, RegexOptions.IgnoreCase).Success;

有效值示例:

"3",
"-3",
"0",
"0.0",
"1.0",
"0.7",
"690.7",
"0.0001",
"-555",
"945465464654"

无效值的示例:

"a",
"",
" ",
".",
"-",
"001",
"00.2",
"000.5",
".3",
"3.",
" -1",
"--1",
"-.1",
"-0",
"00099",
"099"

其他回答

^\d+$,在英语中是“字符串的开始”,“1个或多个数字”,“字符串的结束”。

如果你只想从字符串中提取数字,模式“\d+”应该会有帮助。

Regex Regex =新的正则表达式(" ^[0 - 9]{1 4}=[0 - 9]{1,4]美元”)

使用开始锚和结束锚。

 Regex regex = new Regex(@"^\d$");

如果需要匹配多个数字,请使用“^\d+$”。

对不起,格式很难看。 对于任意位数:

[0-9]*

对于一个或多个数字:

[0-9]+