当前位置:编程学习 > C#/ASP.NET >>

这个正则表达式该如何写呢?

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分了,求解决。 --------------------编程问答-------------------- 直接说想要什么结果 --------------------编程问答-------------------- 好像是url里的内容啊,如果只是为了取出这些内容 
string str = "search--category--ct1--cn1--nav1_10_1050--ar1--add1-dt1--s1";
        str = str.Replace("--", "-");
        string[] oArra = str.Split('-');
--------------------编程问答--------------------
   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
                 */
            }
--------------------编程问答--------------------
引用 2 楼 bonnibell 的回复:
好像是url里的内容啊,如果只是为了取出这些内容 
string str = "search--category--ct1--cn1--nav1_10_1050--ar1--add1-dt1--s1";
        str = str.Replace("--", "-");
        string[] oArra = str.Split('-');

 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

我这一串只能匹配到三个结果。
--------------------编程问答-------------------- 如果把空格全去掉就剩下一个结果 --------------------编程问答-------------------- 我要的结果是字符串的格式只能是上面6种格式中的一种。除了nav中会带0到n个下划线,其他的都只能带数字。 --------------------编程问答-------------------- --------------------编程问答--------------------

还有,你要的匹配是什么呢?验证你给的一个字符串满足条件呢?还是需要从一个大的文章里面取出这样一串字符串呢?


如果是前者,可以这么写search--category--ct1--cn1--nav1_10_1050(-+[a-z]+\d+)*

如果是后者,你要把结束字符前面的字符拿出来,要不然怎么判断到什么地方结束了呢? --------------------编程问答--------------------
            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_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
*/
补充:.NET技术 ,  ASP.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,