C#_如何概述格式编号字符串

时间:2017-09-21 14:13:36

标签: c# regex

如何概述格式编号字符串: 字符串输入:

Car2Bike4Ship3Bike6Car9Ship8Car7Car2

这是我的输出字符串:

Car : 2+9+7+2
Bike : 4+6
Ship : 3+8

我的代码:

String source = “Car2Bike4Ship3Bike6Car9Ship8Car7Car2”;
        var result = Regex
.Matches(source, @"(?<name>[A-z_[ạảàáãăắẳằặẵâấẩầậẫóỏòọõôốổồộỗơớởờợỡéèẻẹẽêếềểệễúùủụũưứừửựữíìỉịĩýỳỷỵỹđ_ẠẢÀÁÃĂẮẲẰẶẴÂẤẨẦẬẪÓỎÒỌÕÔỐỔỒỘỖƠỚỞỜỢỠÉÈẺẸẼÊẾỀỂỆỄÚÙỦỤŨƯỨỪỬỰỮÍÌỈỊĨÝỲỶỴỸĐ_a-z]+)(?<size>([0-9]+\.[0-9])|([0-9]+))")
.OfType<Match>()
.Select(match => new
{
    name = match.Groups["name"].Value,
    size = double.Parse(match.Groups["size"].Value),
})

.GroupBy(value => value.name)
.Select(chunk => String.Format("{0}: {1}",
   chunk.Key, String.Join(" + ", chunk.Select(item => item.size))));
        String report = String.Join(Environment.NewLine, result);
               report = report.Replace(": 0", ":");
               report = report.Replace(": +", ":");
               txbkqvl.Text = Convert.ToString(report);

现在,我希望在这些线上提前一个SUMARY并处理一个特殊项目“CAR”。看起来像:

11 Car :
2 Unit(s) 2
1 Unit(s) 9
1 Unit(s) 7 
10 Bike : 4+6
11 Ship : 3+8

我不确定我的代码是否趋势。 非常感谢!!!

1 个答案:

答案 0 :(得分:1)

添加总和应该非常简单,例如

.Select(chunk => String.Format("{0} {1}: {2}",
   chunk.Sum(item => item.size), chunk.Key, String.Join(" + ", chunk.Select(item => item.size))));

至于特殊处理......老实说,总的来说,我建议将代码分解为易于阅读的步骤并从那里开始工作。你的那种&#34; guru代码&#34;非常紧凑,但难以理解和修改。

首先将数据解析为简单对象,然后按照所需的步骤处理这些对象。在一个巨大的LINQ链中做所有事情并不总是最好的做法。