字符串嵌套括号的分组
string str = "1,2,3,{1,2,3,{1,2,3}},{4,5,6,{4,5,6}},3,{6,7,8,{6,7,8,{10,11}}}";
//需要转成string[]:
string[0] = "1";
string[1] = "2";
string[2] = "3";
string[3] = "1,2,3,{1,2,3}";
string[4] = "4,5,6,{4,5,6}";
string[5] = "3";
string[6] = "6,7,8,{6,7,8,{10,11}}";
参考:正则与平衡组
试了很多次,没办法弄出来,请指教:(
--------------------编程问答-------------------- 老实说,这个需求很头晕! --------------------编程问答-------------------- 想法是 栈 --------------------编程问答--------------------
string str = "1,2,3,{1,2,3,{1,2,3}},4,{4,5,6,{4,5,6}},3,{6,7,8,{6,7,8,{10,11}}},{4,5,{4,5,6},6}";--------------------编程问答-------------------- 正则表达式不大熟悉,用了一个笨办法:(已测试)
Regex reg = new Regex(@"(?:\d+|(?:(?<Open>\{)[^{}]*?)+(?:(?<-Open>\})[^{}]*?)+(?(Open)(?!)))");
foreach (Match m in reg.Matches(str))
Console.WriteLine(m.Value);
/*
1
2
3
{1,2,3,{1,2,3}}
4
{4,5,6,{4,5,6}}
3
{6,7,8,{6,7,8,{10,11}}}
{4,5,{4,5,6},6}
*/
string str = "1,2,3,{1,2,3,{1,2,3}},{4,5,6,{4,5,6}},3,{6,7,8,{6,7,8,{10,11}}}";
char[] charArr=str.ToCharArray();
Queue<string> quStrs=new Queue<string>();
bool bMatched=true;
int num=0;
int index=0;
string temp = "";
for(int i=0;i<charArr.Length ;i++)
{
char ch=charArr[i];
if (num != 0)
temp += ch;
if(ch=='{')
{
num++; //左括号出现
bMatched = false;
if(num==1) //第一次出现
index = i + 1;
}
if (ch != ',' && bMatched && num == 0 && temp == "")
{
quStrs.Enqueue(new string(ch, 1));
}
if(ch=='}')
{
num--;
if(num==0)
{
bMatched = true;
quStrs.Enqueue(temp.Substring(0, temp.Length - 1));
index = 0;
temp = "";
}
}
}
string[] strs = quStrs.ToArray();
strs 就是你要的结果!
补充:.NET技术 , C#