我有以下字符串
P,MV,A1ZWR,MAV#(X,,), PV,MOV#(X,12,33),LO
Run Code Online (Sandbox Code Playgroud)
我需要输出为
P
MV
A1ZWR
MAV#(X,,)
PV
MOV#(X,12,33)
LO
Run Code Online (Sandbox Code Playgroud)
可以看出,通过","拆分可以轻松完成,但问题来了
当它是MAV#(X ,,)或MOV#(X,12,33)类型时.
请帮忙
您可以使用正则表达式匹配分隔符之间的值,并指定parantheses中的所有内容都是值的一部分.例:
string data = "P,MV,A1ZWR,MAV#(X,,), PV,MOV#(X,12,33),LO";
foreach (Match m in Regex.Matches(data, @"\s*((\(.*?\)|[^,])*)(,|$)")) {
Console.WriteLine(m.Groups[1].Value);
}
Run Code Online (Sandbox Code Playgroud)
输出:
P
MV
A1ZWR
MAV#(X,,)
PV
MOV#(X,12,33)
LO
Run Code Online (Sandbox Code Playgroud)
由于仅使用 LINQ 没有这样的解决方案,而且我对它的外观很感兴趣,所以我想出了这个。但我不建议在生产代码中使用它。实际上我希望它会更好,但由于需要处理嵌套括号,我不得不引入可变状态变量。
string data = "P,MV,A1ZWR,MAV#(X,,), PV,MOV#(X,12,33),LO";
int depth = 0;
int group = 0;
var result = data
.GroupBy(x => {
if (x == '(') depth++;
if (x == ')') depth--;
if (x == ',' && depth == 0) group++;
return group; })
.Select(x => new String(x.ToArray()).Trim(' ', ','))
Run Code Online (Sandbox Code Playgroud)