2014-10-07 150 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

相關問題