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

时间:2012-02-24 20:48:14

标签: c# arrays

我有以下字符串:

"(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.

我可以通过剥离第一个和最后一个parens,拆分“),(”然后循环遍历该数组并进行另一次拆分。但我感觉很脏,不像,一个脱衣舞娘(双关语)吧......有更干净的方式吗?

也许有些LINQ可以救援?

我正在使用C#。

4 个答案:

答案 0 :(得分: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();

答案 1 :(得分:3)

您应该可以通过字符串拆分和LINQ轻松地创建一个jagged array(如您的代码所示):

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();

答案 2 :(得分: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)
}

希望这有帮助!

答案 3 :(得分:0)

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

一个正则表达式是:(\(([A-Z]+)\,?\))+这将在组中为您提供x,y,z ..然后只需将它们添加到您的第二维数组中:)