解决方案 »

  1.   

    101|A|106=B|106=C|107|D
    这什么意思
    101没有=,表示这题没有写,交白卷?
    A和D前面没跟题号,这又是闹哪样,到底是哪个题的选项啊
    不是应该
    101=A|106=B|106=C|107=D
    才对吗如果你不能给出明确的规则,这根本没法处理
      

  2.   


    哦我输写失误了是这样的哈 str="101=A|106=B|106=C|107=D"
    须要得到 str="101=A|106=B,C|107=D"
      

  3.   


    str="101|A|106|B,C|107|D"   
    这样更合理吧?
    或者改大一点..str="101|A;106|B,C;107|D"   
      

  4.   

    如果你能找到源头,直接在拼接的地方判断一下,一样的就直接追加选项,而不再重新写一遍题号,那样更简单一些否则你需要先Split把字符串分解成字符串数组,然后循环遍历判断上一个和下一个是否一样,再合并
      

  5.   


    str="101|A|106|B,C|107|D"   
    这样更合理吧?
    或者改大一点..str="101|A;106|B,C;107|D"   你这个意思都差不多,主要是我不能直接得到多项选择 就处理成106|B,C这个格式,我用的表单serialize()
    得到的就是106=B;106=C   (选择两个的情况下,当然选一个就没问题)
      

  6.   


    string.Join("|", str.Split('|').Select(p => p.Split('='))
        .GroupBy(p => p[0], p => p[1])
        .Select(g => g.Key + "=" + string.Join(",", g)));
      

  7.   


    .Select(   有问题 已经引用了 using System.Linq;的
      

  8.   

    11楼那样子是可以的。需要引用linq明目空间。
      

  9.   

    //using System.Text.RegularExpressions
    var str = "101|A|106=B|106=C|107|A|108=A|108=D|109|D";
    str = Regex.Replace(str, @"((\|?\d+=)([A-Z]))+", m => m.Groups[2].Captures[0].Value + string.Join(",", m.Groups[3].Captures.Cast<Capture>().Select(c => c.Value).ToArray()));
      

  10.   

    //using System.Text.RegularExpressions
    var str = "101|A|106=B|106=C|107|A|108=A|108=D|109|D";
    str = Regex.Replace(str, @"((\|?\d+=)([A-Z]))+", m => m.Groups[2].Captures[0].Value + string.Join(",", m.Groups[3].Captures.Cast<Capture>().Select(c => c.Value).ToArray()));