2014-10-07 152 views
-4

我想使用Regex.Split方法将此输入string拆分为array。它必须将这个词分组。正则表达式分割字符串在特定字

输入:**AAA**-1111,**AAA**-666,**SMT**-QWQE,**SMT**-TTTR

预期输出:

**AAA** : 1111,666 

**SMT** : QWQE,TTTR 

,我需要使用什么样的模式?

+4

条目的任意数量的通用解决方案:拆分由',',排序,再拆由'-',然后组。 – nhahtdh 2014-10-07 08:28:39

回答

2

作为问题笔记的评论,你不能在一个单一的步骤(正则表达式或不)。

所以:

  1. 拆分上逗号。
  2. 划破划线(但保持对)
  3. 由每对的第一部分组。

喜欢的东西:

var result = select outer in input.Split(",") 
      let p = outer.Split('-') // will be string[2] 
      select new { identifier = p[0], value = p[1] } 
      into pair 
      group by pair.identifier into g 
      select new { 
       identifier = g.Key 
       values = String.Join(",", g) 
      } 
0

这应该给你一个IEnumerable与key -string和一个字符串列表(以逗号分隔)的values脱颖而出每个:

var input = "AAA-1111,AAA-666,SMT-QWQE,SMT-TTTR"; 

var list = input.Split(',') 
       .Select(pair => pair.Split('-')) 
       .GroupBy(pair => pair.First()) 
       .Select(grp => 
          new{ 
           key = grp.Key, 
           items = String.Join(",", grp.Select(x => x[1])) 
           }); 

你可以然后像这样使用它(如果你只是想输出值):

string output = ""; 
foreach(var grp in list) 
{ 
    output += grp.key + ": " + grp.items + Environment.NewLine; 
} 
这里
+0

感谢兄弟,非常appriciate。 – 2014-10-08 05:44:38

0

FWIW是用流利的语法相同的解决方案,这可能是更容易理解:

string input = "AAA-1111,AAA-666,SMT-QWQE,SMT-TTTR"; 

Dictionary<string, string> output = input.Split(',') // first split by ',' 
    .Select(el => el.Split('-')) // then split each inner element by '-' 
    .GroupBy(el => el.ElementAt(0), el => el.ElementAt(1)) // group by the part that comes before '-' 
    .ToDictionary(grp => grp.Key, grp => string.Join(",", grp)); // convert to a dictionary with comma separated values 

-

output["AAA"] // 1111,666 
output["SMT"] // QWQE,TTTR 
+0

感谢兄弟引擎盖 – 2014-10-08 05:49:40

相关问题