C#:任何数字的正则表达加上没有限制的小数点

时间:2012-07-30 10:05:18

标签: c# regex

我正在寻找能够验证字符串是否包含0以上任何数字的正则表达式,并且还允许小数点位于除.1或.45之外的任何位置。在任何一点上的小数,我的意思是数字应该能够具有任意数量的精确位置。

数字真的可以是任何东西:

1
2
3.5
3.58278723475
6523424.82347265

我有这个当然失败,因为我的正则表达不考虑小数点:

 foreach (string[] coorPairArray in extents.Select(t => t.Trim().Split(' ')))
 {
     Regex isnumber = new Regex("^[0-9]+$");

     if ((!isnumber.IsMatch(coorPairArray[0]) || (!isnumber.IsMatch(coorPairArray[1]))))
     {
         dataBaseConnection.Close();

         throw new ArgumentException("Error: An extent value contained alphanumeric data. GetExtentsAsGml().");
     }
  }

5 个答案:

答案 0 :(得分:4)

这应该做的工作:

 Regex isnumber = new Regex(@"^[0-9]+(\.[0-9]+)?$");

答案 1 :(得分:3)

你甚至需要一个正则表达式吗?不会像这样的工作:

foreach (string[] coorPairArray in extents.Select(t => t.Trim().Split(' '))) 
{
    var lat = Decimal.MinValue;
    var lng = Decimal.MinValue;
    if (!Decimal.TryParse(coorPairArray[0], out lat) || !Decimal.TryParse(coorPairArray[1], out lng))
    {
         dataBaseConnection.Close(); 
         throw new ArgumentException("Error: An extent value contained alphanumeric data. GetExtentsAsGml().");
    }

    // do something with lat/lng
} 

答案 2 :(得分:1)

[1-9][0-9]*(\.[0-9]+)? | 0\.[0-9]+

第一个是普通数字。 第二个处理像0.1

这样的事情

当然,根据需要添加^和$。

我宁愿选择詹姆斯的回答而不是这个。这只是为了好奇。

答案 3 :(得分:1)

最好像在@James中那样做一个tryparse,如果你想要通过正则表达式,那么这里有一个样本:

[Test]
[TestCase("1")]
[TestCase("2")]
[TestCase("3.5")]
[TestCase("3.58278723475")]
[TestCase("6523424.82347265")]
public void FluentCalculator_Test(string testSource)
{
    var match = Regex.Match(testSource, @"^(?:[-+]?[1-9]\d*|0)?(?:\.\d+)?$");
    Assert.IsTrue(match.Success);
}

答案 4 :(得分:0)

这对我很好用

    @"^\d*(?:\.\d+)?$"