C#从非唯一数字字符串中解析浮点数

时间:2017-05-02 14:27:13

标签: c# regex parsing

我收到一个格式化的字符串,但我无法更改来源;它看起来像这样:

{
"value": 4.12
}

我必须将其解析为双精度才能显示数字。 在使用regex之前,我应该使用double.TryParse()清除它,但我不知道如何格式化正则表达式...

4 个答案:

答案 0 :(得分:2)

如果你只错过new Foundation.Tooltip($(".has-tip"), { allowHtml: true }); $('.has-tip').foundation(); 周围的双引号,那就是有效的JSON。您可以使用几乎任何json库来解析它。

答案 1 :(得分:2)

使用LINQ to JSON,您可以在一行中检索该值:

var json = @"{
    ""value"" : 4.12
}";
var value = (double)JObject.Parse(json)["value"];

演示:https://dotnetfiddle.net/e0viPY

<强> P.S。

由于Json.NET接受更宽松的语法,因此即使使用原始问题版本(即不带引号的密钥),此代码也能正常工作:

var json = "{ value : 4.12 }";
var value = (double)JObject.Parse(json)["value"];

演示:https://dotnetfiddle.net/iLERPb

答案 2 :(得分:0)

您可以使用以下正则表达式 -

[0-9] +([0-9] [0-9])?

答案 3 :(得分:0)

快速而肮脏的正则表达式解决方案:

  string source = @"{
     ""value"": 4.12
  }";

  double result = double.Parse(Regex.Match(source, @"-?[0-9]*\.?[0-9]+").Value,
    CultureInfo.InvariantCulture);

然而,更好的实现是将其反序列化为JSON