我有以下字符串:
"(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#。
答案 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 ..然后只需将它们添加到您的第二维数组中:)