字符串“(AAA)\(BBB).(CCC)-(DDD) (FFF) -(GGG)-H1-(H2-H3)”想要得到下面结果就是 (内容和分隔符)
AAA 
\
BBB 
.
CCC 
-
DDD 
(空格)
FFF 
(空格)-
GGG
-
H2-H3
----------------
不取H1,因为没有在括号中()

解决方案 »

  1.   

    string str = @"(AAA)\(BBB).(CCC)-(DDD) (FFF) -(GGG)-H1-(H2-H3)";
            Match m = Regex.Match(str, @"\((?<p>[^\)]+)\)(?<c>.{1})?");
            while (m.Success)
            {
                Response.Write(m.Groups["p"].Value + "\r\n");
                Response.Write(m.Groups["c"].Value + "\r\n");
                m = m.NextMatch();
            }我测试是可以的。。应该满足需求
      

  2.   

    谢谢这位兄弟可是,不灵啊,两个字符为分割符的怎么处理,3个的呢?
    string str = @"(AAA)\(BBB).(CCC)-(DDD) (FFF) -(GGG)-H1-(H2-H3)";
            Match m = Regex.Match(str, @"\((?<p>[^\)]+)\)(?<c>[^\W]+)?");
            while (m.Success)
            {
                Response.Write(m.Groups["p"].Value + "\r\n");
                Response.Write(m.Groups["c"].Value + "\r\n");
                m = m.NextMatch();
            }
      

  3.   

    谢谢这位兄弟可是,不灵啊,两个字符为分割符的怎么处理,3个的呢?
    string str = @"(AAA)\(BBB).(CCC)-(DDD) (FFF) -(GGG)-H1-(H2-H3)";
            Match m = Regex.Match(str, @"\((?<p>[^\)]+)\)(?<c>[^\W]+)?");
            while (m.Success)
            {
                Response.Write(m.Groups["p"].Value + "\r\n");
                Response.Write(m.Groups["c"].Value + "\r\n");
                m = m.NextMatch();
            }
    这样搞出来分隔符都变成空了
      

  4.   

    string str = @"(AAA)\(BBB).(CCC)-(DDD) (FFF) -(GGG)-H1-(H2-H3)";
                var ary = Regex.Split(str, @"(?is)(?:\(|\)(?=[^()a-z0-9]+)|\)[^()]+?[a-zA-Z0-9][^()]*)");
                
      

  5.   

     string str = @"(AAA)\(BBB).(CCC)-(DDD) (FFF) -(GGG)-H1-(H2-H3)";
                var ary = Regex.Matches(str, @"\((?<k>[^()]+)\)|(?<w>(?<=\))[^()a-z0-9A-Z]+(?=\())").OfType<Match>().Select(t => t.Groups["k"].Value + t.Groups["w"].Value).ToArray();