Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/303.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/31.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#_Asp.net_Regex - Fatal编程技术网

C# 从字符串中提取值->;团体成绩

C# 从字符串中提取值->;团体成绩,c#,asp.net,regex,C#,Asp.net,Regex,我想提取字符串中的一些十进制数字->对字符串进行分组并对值求和 我从私有API获取字符串。它们看起来像这样: var foo = new List<string>() { "+0.9 A / +0.62 B", "+0.9 A / +0.62 B", "+0.9 A / +0.62 B", "+1.2 C",

我想提取字符串中的一些十进制数字->对字符串进行分组并对值求和

我从私有API获取字符串。它们看起来像这样:

var foo = new List<string>()
              {
                  "+0.9 A / +0.62 B",
                  "+0.9 A / +0.62 B",
                  "+0.9 A / +0.62 B",
                  "+1.2 C",
                  "+1.2 C",
                  "+2.0% D",
                  "+2.0% D"
              }.GroupBy(x => x).ToList();

foreach (var group in foo)
{
    foreach (var str in group)
    {
        //...?       
    }
}

我想这必须用正则表达式来解决。我不知道如何创建模式,但我的最佳选择是类似于
\+\d+.?\d*
的东西。它可能在正确的轨道上,但我需要你的帮助完成它。例如,它不考虑可能的“%”(“+2.0%”)。

这样做似乎有点奇怪,但这应该非常接近(在最后一行生成+4%,而不是4.0%):

var r=new System.Text.RegularExpressions.Regex(@“(?[+-]+[\d]+[\d]+)”;
foreach(foo中的变量g){
var st=g.First();
var mt=r.匹配(st);
var总和=新的双倍[mt.Count];
foreach(var l in g){
var m=r.匹配(l);
对于(变量i=0;i=0.0){sb.Append(“+”);}
else{sb.追加(“-”);}
某人追加(总和[一]);
start=mt[i]。索引+mt[i]。长度;
}
sb.追加(st.子串(开始));
Console.Write(sb.ToString());
}

是否可以有以
-
开头的十进制数?当你有一行像
“+0.9a/+0.62c”
”这样的代码时会发生什么?@L.B 1:No.2:像往常一样求和。这封信并不重要,谢谢你。我使用了另一个解决方案,但我会接受,因为它符合我的要求。如果你愿意,如果你发布你的解决方案,以便其他搜索答案的人以后可以有多个选项进行查看,这可能会很有趣。是的,我会添加它。注意到一只虫子。稍后发布:)
"+2.7 A / +1.86 B",
"+2,4 C",
"+4.0% D"
        var r = new System.Text.RegularExpressions.Regex(@"(?<Num>[+-]+[\d]+.[\d]+)");
        foreach (var g in foo) {
            var st = g.First();
            var mt = r.Matches(st);
            var sums = new double[mt.Count];
            foreach (var l in g) {
                var m = r.Matches(l);
                for (var i = 0; i < m.Count; i++) {
                    double d;
                    if (double.TryParse(m[i].Value, out d)) {
                        sums[i] += d;
                        }
                    }
                }
            var sb = new StringBuilder();
            var start = 0;
            for (var i = 0; i < mt.Count; i++) {
                sb.Append(st.Substring(start, mt[i].Index - start));
                if (sums[i] >= 0.0) { sb.Append("+"); }
                else                { sb.Append("-"); }
                sb.Append(sums[i]);
                start = mt[i].Index + mt[i].Length;
                }
            sb.AppendLine(st.Substring(start));
            Console.Write(sb.ToString());
            }