【问题标题】:C# Extracting String and Double from line of stringC#从字符串行中提取字符串和双精度数
【发布时间】:2020-06-08 08:46:17
【问题描述】:

我有一行需要从中提取名称和该名称的结果(双精度)。

这条线看起来像这样:

James: 8, John: 8, Jasmin: 12, Igor: 1.54, Garry: 0, Gabe: 0.12, Lauren: 0, Grace: 81.31

我需要它们中的每一个作为名称和数量的数组。

我尝试使用正则表达式,但失败了。非常感谢任何帮助。

【问题讨论】:

  • 不需要正则表达式:用", "拆分,然后用": "拆分每个项目

标签: c# string text-extraction


【解决方案1】:

正如评论所说,您不需要正则表达式,只需拆分即可。类似的东西有效:

string str = "James: 8, John: 8, Jasmin: 12, Igor: 1.54, Garry: 0, Gabe: 0.12, Lauren: 0, Grace: 81.31";
var values = str.Split(',');
(string name, double value)[] result = new (string, double)[values.Length];
for (int i = 0; i < values.Length; i++)
{
    var splittedValue = values[i].Split(':');
    result[i] = (splittedValue[0], Double.Parse(splittedValue[1], CultureInfo.InvariantCulture));
}

【讨论】:

  • 应该是最干净的方式,我会处理空格,修剪分割本身应该可以解决问题
  • 修剪对名称部分很有用,但在解析时会自动完成
  • 你是对的,这只是为了容错;-)
【解决方案2】:

由于线路是规则的,您可以一次拆分:

string str = "James: 8, John: 8, Jasmin: 12, Igor: 1.54, Garry: 0, Gabe: 0.12, Lauren: 0, Grace: 81.31";

var values = str.Split(',',':');
(string name, double value)[] result = new (string, double)[values.Length/2];
for (int i = 0; i < values.Length; i+=2)
    result[i/2] = (values[i].Trim(), Convert.ToDouble(values[i+1]));

【讨论】:

    猜你喜欢
    • 2011-04-28
    • 2018-06-13
    • 2013-02-26
    • 1970-01-01
    • 2017-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多