我有一串格式如({a,b,c,d},{(a,b),(b,c),(a,c),(c,d)})
。我想拆分并将其存储在2个数组中,1个将包含a,b,c,d
,其他将存储ab,bc,ac,cd
。
我是以完全模糊的方式做的。
string str = "({a,b,c,d},{(a,b),(b,c),(a,c),(c,d)})";
var node = str.Substring(1, str.Length - 2).Replace("},{", "}|{").Split('|')[0].Replace("{", "").Replace("}", "").Split(',');
var path = str.Substring(1, str.Length - 2).Replace("},{", "}|{").Split('|')[1].Replace("{", "").Replace("}", "").
Replace("(", "").Replace(")", "").Replace("),", "|").Replace(",", "").Split('|');
请建议我以更好的方式做到这一点。
修改
字符串的第一部分将包含{n1,n2,n3...n}
之类的节点,第二部分将包含节点之间的路径{(n1,n2),(n2,n3),...}
答案 0 :(得分:1)
使用正则表达式。
string str = "({a,b,c,d},{(a,b),(b,c),(a,c),(c,d)})";
string group1 = new Regex(@"\{([a-z],?)*\}").Match(str).Value;
string group2 = new Regex(@"(\(([a-z],?)*\),?)+").Match(str).Value;
string[] arr1 = group1.Substring(1, group1.Length-2).Split(',');
string[] arr2 = group2.Split(new[] { "),(" }, StringSplitOptions.None)
.Select(s => Regex.Replace(s, @"[^a-z]+", String.Empty)).ToArray();
答案 1 :(得分:0)
试试这个
string str = "({a,b,c,d},{(a,b),(b,c),(a,c),(c,d)})";
str = str.Substring(1, str.Length - 2)
.Replace("},{", "}|{").Replace("{", "").Replace("}","")
.Replace("),(", ";").Replace("(", "")
.Replace(")", "").Replace(",", "");
string[] arrStr = str.Split('|');
string[] s1 = arrStr[0].Split(',');
string[] s2 = arrStr[1].Split(';');
答案 2 :(得分:0)
使用此方法,您可以使用任意数量的数组:
private static List<List<string>> ConvertStringToListList(string str){
List<List<string>> bufferListList = new List<List<string>>();
do{
var startArrayIndex = str.IndexOf("{")+1;
var endArrayIndex = str.IndexOf("}")+1;
var array = str.Substring(startArrayIndex, endArrayIndex-startArrayIndex);
List<string> stringList = new List<string>();
if(array.Contains("(")){
do{
var startArrayIndex2 = array.IndexOf("(")+1;
var endArrayIndex2 = array.IndexOf(")")+1;
var array2 = array.Substring(startArrayIndex2, endArrayIndex2-startArrayIndex2);
stringList.Add(array2.Replace(",","").Replace(")",""));
array = array.Substring(endArrayIndex2, array.Length - endArrayIndex2);
}while(array.Contains("("));
}else{
array = array.Replace("}","");
foreach(var strings in array.Split(',')){
stringList.Add(strings);
}
}
bufferListList.Add(stringList);
str = str.Substring(endArrayIndex, str.Length - endArrayIndex);
}while(str.Contains("{"));
return bufferListList;
}
返回值是数组/列表的列表。
您可以在此处使用此方法:https://dotnetfiddle.net/AVggNf
示例:
输入:"({a,b,c,d},{(a,b),(b,c),(a,c),(c,d)})"
Outout:
输入:"({(a,b)},{(a,c),(c,d)}, {a,b})"
Outout: