search--category--ct1--cn1--nav1_10_1050
search--category--ct1--cn1--nav1_10_1050--ar1
search--category--ct1--cn1--nav1_10_1050--ar1-add1
search--category--ct1--cn1--nav1_10_1050--ar1--add1-dt1
search--category--ct1--cn1--nav1_10_1050--ar1--add1-dt1--s1
search--category--ct1--cn1--nav1_10_1050--ar1--add1-dt1--s1--p1我想用一个正则表达式匹配上面的每一行字符串。
除了nav后面的_字符个数不定,0到n个吧。
最后99分了,求解决。

解决方案 »

  1.   

    好像是url里的内容啊,如果只是为了取出这些内容 
    string str = "search--category--ct1--cn1--nav1_10_1050--ar1--add1-dt1--s1";
            str = str.Replace("--", "-");
            string[] oArra = str.Split('-');
      

  2.   

       string tempStr = File.ReadAllText(@"C:\Users\dell\Desktop\Test.txt",Encoding.GetEncoding("gb2312"));
                string pattern = @"(?im)([^-\s]+(--)?)+(([^-\s]+)?-?)*";
                foreach (Match m in Regex.Matches(tempStr, pattern))
                {
                    string value = m.Value;
                    /*总共循环五次 上面五行全部匹配
                      search--category--ct1--cn1--nav1_10_1050
                      search--category--ct1--cn1--nav1_10_1050--ar1
                      search--category--ct1--cn1--nav1_10_1050--ar1-add1
                      search--category--ct1--cn1--nav1_10_1050--ar1--add1-dt1
                      search--category--ct1--cn1--nav1_10_1050--ar1--add1-dt1--s1
                      search--category--ct1--cn1--nav1_10_1050--ar1--add1-dt1--s1--p1
                     */
                }
      

  3.   

     search--category--ct1--cn1--nav1_10_1050search--category--ct1--cn1--nav1_10_1050--ar1 search--category--ct1--cn1--nav1_10_1050--ar1-add1 search--category--ct1--cn1--nav1_10_1050--ar1--add1-dt1search--category--ct1--cn1--nav1_10_1050--ar1--add1-dt1--s1search--category--ct1--cn1--nav1_10_1050--ar1--add1-dt1--s1--p1我这一串只能匹配到三个结果。
      

  4.   

    我要的结果是字符串的格式只能是上面6种格式中的一种。除了nav中会带0到n个下划线,其他的都只能带数字。
      

  5.   

    还有,你要的匹配是什么呢?验证你给的一个字符串满足条件呢?还是需要从一个大的文章里面取出这样一串字符串呢?
    如果是前者,可以这么写search--category--ct1--cn1--nav1_10_1050(-+[a-z]+\d+)*如果是后者,你要把结束字符前面的字符拿出来,要不然怎么判断到什么地方结束了呢?
      

  6.   

                string str = @"search--category--ct1--cn1--nav1_10_1050search--category--ct1--cn1--nav1_10_1050--ar1 search--category--ct1--cn1--nav1_10_1050--ar1-add1 search--category--ct1--cn1--nav1_10_1050--ar1--add1-dt1search--category--ct1--cn1--nav1_10_1050--ar1--add1-dt1--s1search--category--ct1--cn1--nav1_10_1050--ar1--add1-dt1--s1--p1";
                Regex reg = new Regex(@"search--category--ct1--cn1--nav\d+(?:_\d+)*(?:--?(?:(?!search).)+)*");
                foreach (Match m in reg.Matches(str))
                    Console.WriteLine(m.Value+"\r\n");
    /*
    search--category--ct1--cn1--nav1_10_1050search--category--ct1--cn1--nav1_10_1050--ar1search--category--ct1--cn1--nav1_10_1050--ar1-add1search--category--ct1--cn1--nav1_10_1050--ar1--add1-dt1search--category--ct1--cn1--nav1_10_1050--ar1--add1-dt1--s1search--category--ct1--cn1--nav1_10_1050--ar1--add1-dt1--s1--p1
    */