假设有
String s = "{AAAAAAAAAAAAAAAAAAAAAAAAAAA,'KEY':1111,FFFFFFFFFFFFFFFFFF{CCCCCC:XXXXX},DDDDDDDDDDDDDDDD},{AAAAAAAAAAAAAAAAAAAAAAA,'KEY':22222,FFFFFFFFFFFFFFF{CCCCCC:XXXXX},DDDDDDDDHHDDDDD},{AAAAAAAAAAAAAAAAAAAAAAAAAA,'KEY':3,FFFFFFFFFFFFFF{CCCCCC:XXXXX},DDDDDDDDFFDDDD}";现在想把这个字符串分割成3份,分别是string s1 = "{AAAAAAAAAAAAAAAAAAAAAAAAAAA,'KEY':1111,FFFFFFFFFFFFFFFFFF{CCCCCC:XXXXX},DDDDDDDDDDDDDDDD}";
string s2 = "{AAAAAAAAAAAAAAAAAAAAAAA,'KEY':22222,FFFFFFFFFFFFFFF{CCCCCC:XXXXX},DDDDDDDDHHDDDDD}";
string s2 = "{AAAAAAAAAAAAAAAAAAAAAAAAAA,'KEY':3,FFFFFFFFFFFFFF{CCCCCC:XXXXX},DDDDDDDDFFDDDD}";
规则就是每个最外围的{}内必须都有个一个'KEY':\d+的字符串用{.*?'KEY':\d+.*?}来匹配得出的结果是string s1 = "{AAAAAAAAAAAAAAAAAAAAAAAAAAA,'KEY':1111,FFFFFFFFFFFFFFFFFF{CCCCCC:XXXXX}";
string s2 = "{AAAAAAAAAAAAAAAAAAAAAAA,'KEY':22222,FFFFFFFFFFFFFFF{CCCCCC:XXXXX}";
string s2 = "{AAAAAAAAAAAAAAAAAAAAAAAAAA,'KEY':3,FFFFFFFFFFFFFF{CCCCCC:XXXXX}";不是我想要的结果.分析下,关键就是字符串中也有}这个符号,但是这个}前面必然有个{和他匹配,现在就是怎么排除里面的这对{}
String s = "{AAAAAAAAAAAAAAAAAAAAAAAAAAA,'KEY':1111,FFFFFFFFFFFFFFFFFF{CCCCCC:XXXXX},DDDDDDDDDDDDDDDD},{AAAAAAAAAAAAAAAAAAAAAAA,'KEY':22222,FFFFFFFFFFFFFFF{CCCCCC:XXXXX},DDDDDDDDHHDDDDD},{AAAAAAAAAAAAAAAAAAAAAAAAAA,'KEY':3,FFFFFFFFFFFFFF{CCCCCC:XXXXX},DDDDDDDDFFDDDD}";现在想把这个字符串分割成3份,分别是string s1 = "{AAAAAAAAAAAAAAAAAAAAAAAAAAA,'KEY':1111,FFFFFFFFFFFFFFFFFF{CCCCCC:XXXXX},DDDDDDDDDDDDDDDD}";
string s2 = "{AAAAAAAAAAAAAAAAAAAAAAA,'KEY':22222,FFFFFFFFFFFFFFF{CCCCCC:XXXXX},DDDDDDDDHHDDDDD}";
string s2 = "{AAAAAAAAAAAAAAAAAAAAAAAAAA,'KEY':3,FFFFFFFFFFFFFF{CCCCCC:XXXXX},DDDDDDDDFFDDDD}";
规则就是每个最外围的{}内必须都有个一个'KEY':\d+的字符串用{.*?'KEY':\d+.*?}来匹配得出的结果是string s1 = "{AAAAAAAAAAAAAAAAAAAAAAAAAAA,'KEY':1111,FFFFFFFFFFFFFFFFFF{CCCCCC:XXXXX}";
string s2 = "{AAAAAAAAAAAAAAAAAAAAAAA,'KEY':22222,FFFFFFFFFFFFFFF{CCCCCC:XXXXX}";
string s2 = "{AAAAAAAAAAAAAAAAAAAAAAAAAA,'KEY':3,FFFFFFFFFFFFFF{CCCCCC:XXXXX}";不是我想要的结果.分析下,关键就是字符串中也有}这个符号,但是这个}前面必然有个{和他匹配,现在就是怎么排除里面的这对{}
{
String s = "{AAAAAAAAAAAAAAAAAAAAAAAAAAA,'KEY':1111,FFFFFFFFFFFFFFFFFF{CCCCCC:XXXXX},DDDDDDDDDDDDDDDD},{AAAAAAAAAAAAAAAAAAAAAAA,'KEY':22222,FFFFFFFFFFFFFFF{CCCCCC:XXXXX},DDDDDDDDHHDDDDD},{AAAAAAAAAAAAAAAAAAAAAAAAAA,'KEY':3,FFFFFFFFFFFFFF{CCCCCC:XXXXX},DDDDDDDDFFDDDD}";
MatchCollection mc = Regex.Matches(s, @"\{[^}]*'KEY'[^}]*\}");
foreach (Match m in mc)
{
Console.WriteLine(m.Value);
}
}
private static void TestRegex22()
{
String s = "{AAAAAAAAAAAAAAAAAAAAAAAAAAA,'KEY':1111,FFFFFFFFFFFFFFFFFF{CCCCCC:XXXXX},DDDDDDDDDDDDDDDD},{AAAAAAAAAAAAAAAAAAAAAAA,'KEY':22222,FFFFFFFFFFFFFFF{CCCCCC:XXXXX},DDDDDDDDHHDDDDD},{AAAAAAAAAAAAAAAAAAAAAAAAAA,'KEY':3,FFFFFFFFFFFFFF{CCCCCC:XXXXX},DDDDDDDDFFDDDD}";
MatchCollection mc = Regex.Matches(s, @"{((?<o>\{)|(?<-o>\})|[^{}])+(?(o)(?!))}");
List<string> lines = new List<string>();
foreach (Match m in mc)
{
lines.Add(m.Value);
Console.WriteLine(m.Value);
}
//lines就是你需要的结果
}
{AAAAAAAAAAAAAAAAAAAAAAAAAAA,'KEY':1111,FFFFFFFFFFFFFFFFFF{CCCCCC:XXXXX},DDDDDDDDDDDDDDDD}
{AAAAAAAAAAAAAAAAAAAAAAA,'KEY':22222,FFFFFFFFFFFFFFF{CCCCCC:XXXXX},DDDDDDDDHHDDDDD}
{AAAAAAAAAAAAAAAAAAAAAAAAAA,'KEY':3,FFFFFFFFFFFFFF{CCCCCC:XXXXX},DDDDDDDDFFDDDD}如果还有问题,跟帖,贴出范例。这个帖子提问的相当好。描述清晰,例子很好。
参考了http://blog.csdn.net/lxcnn/archive/2009/08/03/4402808.aspx