在c#中将字符串拆分为特定格式?

时间:2017-07-11 18:33:26

标签: c# string

我有一串格式如({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),...}

3 个答案:

答案 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:

  • 列表1:a
  • 列表1:b
  • 清单1:c
  • 清单1:d
  • 清单2:ab
  • 清单2:bc
  • 清单2:ac
  • 列表2:cd

输入:"({(a,b)},{(a,c),(c,d)}, {a,b})"

Outout:

  • 清单1:ab
  • 清单2:ac
  • 列表2:cd
  • 列表3:a
  • 清单3:b