正则表达式分割字符串在特定字
问题描述:
我想使用.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;
}
这里
+0
感谢兄弟,非常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
+0
感谢兄弟引擎盖 – 2014-10-08 05:49:40
条目的任意数量的通用解决方案:拆分由',',排序,再拆由'-',然后组。 – nhahtdh 2014-10-07 08:28:39