如何将包含括号的字符串拆分为多维数组

8

我有以下字符串:

"(X,Y,Z),(A,B,C),(R,S,T)"

我想把这个拆分成一个多维数组:
arr[0] = [x,y,z]
arr[1] = [a,b,c]
arr[2] = [r,s,t]

因此:

arr[0][1] = y,  arr[0][2] = z, etc.

我可以通过去掉第一个和最后一个括号,以“),(”为分隔符进行拆分,然后循环该数组并进行另一次拆分来完成。但是我感觉很不舒服,不纯洁,就像在后巷酒吧里的脱衣舞娘(双关语),有没有更干净的方法?

也许 LINQ 可以解决问题?

我正在使用 C#。


你确定它是一个二维的、非锯齿状的数组吗? - Trystan Spangler
是的,始终是二维的,第二维中元素数量始终相同(3)。 - OpenR
你想要一个锯齿数组(像你的代码)还是一个二维数组? - Reed Copsey
4个回答

5
string data = "(X,Y,Z),(A,B,C),(R,S,T)";

string[][] stringses = data.Trim('(', ')')
    .Split(new[] {"),("}, StringSplitOptions.RemoveEmptyEntries)
    .Select(chunk => chunk.Split(','))
    .ToArray();

3

根据你的代码,你应该可以通过字符串分割和LINQ轻松地创建一个锯齿数组

string original = "(X,Y,Z),(A,B,C),(R,S,T)";

string[] groups = original.Trim('(',')')
                     .Split(new[] {"),("}, StringSplitOptions.RemoveEmptyEntries);
string[][] results = groups.Select(g => g.Split(',')).ToArray();

3

正则表达式是你的好帮手。下面是一段简单的代码片段,可以为你完成此操作。

var input = @"(X,Y,Z),(A,B,C),(R,S,T)";
var pattern = @"[A-Za-z,]+\b";

List<List<string>> twoDimentionList = new List<List<string>>();

foreach (Match m in Regex.Matches(input, pattern)) 
{
    List<string> values = m.Value.Split(',').ToList<string>(); 
    twoDimentionList.Add(values)
}

希望这可以帮到你!

0

你可以使用正则表达式获取你的数据

一个正则表达式是:(\(([A-Z]+)\,?\))+ 这将以组的形式给你 x、y、z.. 然后只需将它们添加到你的二维数组中 :)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接