Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#如何汇总格式数字字符串_C#_Regex - Fatal编程技术网

C#如何汇总格式数字字符串

C#如何汇总格式数字字符串,c#,regex,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_[ạảàáãăắẳằặẵâấẩầậ

如何汇总格式编号字符串: 字符串输入:

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);
我不确定我的代码是否有发展趋势。
非常感谢

相加应该很容易,比如

.Select(chunk => String.Format("{0} {1}: {2}",
   chunk.Sum(item => item.size), chunk.Key, String.Join(" + ", chunk.Select(item => item.size))));
至于特殊待遇。。。老实说,总的来说,我建议将代码分解成易于阅读的步骤,然后从那里开始工作。您的“大师代码”非常紧凑,但很难理解和修改


首先将数据解析成简单的对象,然后按照您的意愿以尽可能多的步骤处理这些对象。在一个巨大的LINQ链中完成所有事情并不总是最佳实践。

要匹配字母,请在C#regex中使用
\p{L}
。不需要详细说明范围。谢谢。我的语言包含Unicode字符。这只是一个和我的情况一样的前男友D
.Select(chunk => String.Format("{0} {1}: {2}",
   chunk.Sum(item => item.size), chunk.Key, String.Join(" + ", chunk.Select(item => item.size))));