我想使用.netRegex.Split
方法將此輸入string
拆分爲array
。它必須將這個詞分組。正則表達式分割字符串在特定字
輸入:**AAA**-1111,**AAA**-666,**SMT**-QWQE,**SMT**-TTTR
預期輸出:
**AAA** : 1111,666
**SMT** : QWQE,TTTR
,我需要使用什麼樣的模式?
我想使用.netRegex.Split
方法將此輸入string
拆分爲array
。它必須將這個詞分組。正則表達式分割字符串在特定字
輸入:**AAA**-1111,**AAA**-666,**SMT**-QWQE,**SMT**-TTTR
預期輸出:
**AAA** : 1111,666
**SMT** : QWQE,TTTR
,我需要使用什麼樣的模式?
作爲問題筆記的評論,你不能在一個單一的步驟(正則表達式或不)。
所以:
喜歡的東西:
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)
}
這應該給你一個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;
}
這裏
感謝兄弟,非常appriciate。 – 2014-10-08 05:44:38
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
感謝兄弟引擎蓋 – 2014-10-08 05:49:40
條目的任意數量的通用解決方案:拆分由',',排序,再拆由'-',然後組。 – nhahtdh 2014-10-07 08:28:39