【问题标题】:C# Parse float from not-only-numerical string [duplicate]C#从非数字字符串解析浮点数[重复]
【发布时间】:2017-09-30 03:02:55
【问题描述】:

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

{
"value": 4.12
}

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

【问题讨论】:

  • 如果source是JSON字符串,反序列化获取属性值
  • 你不会在value 周围缺少双引号吗?
  • 如果你想学习正则表达式,互联网上的相关资源几乎可以到达月球并返回。
  • 又快又脏:double result = double.Parse(Regex.Match(source, @"[0-9]*\.?[0-9]+").Value);
  • @Leonardo 确实,我编辑了问题

标签: c# regex parsing


【解决方案1】:

如果您只是错过了 value 周围的双引号,那是一个有效的 JSON。您可以使用几乎任何 json 库对其进行解析。

【讨论】:

  • 在我看来这不是有效的 JSON,尽管我没有对你投反对票
  • @KSib 我认为他只错过了双引号......常见的错字......
  • 看来你是对的。我也对你投了赞成票,以反对反对票。干杯。
【解决方案2】:

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

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

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

附言

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

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

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

【讨论】:

    【解决方案3】:

    你可以使用下面的正则表达式 -

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

    【讨论】:

      【解决方案4】:

      又快又脏的正则表达式解决方法:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-03-15
        • 2021-06-30
        • 1970-01-01
        • 1970-01-01
        • 2010-09-10
        • 2011-05-25
        • 2013-02-27
        相关资源
        最近更新 更多