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分了,求解决。
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分了,求解决。
string str = "search--category--ct1--cn1--nav1_10_1050--ar1--add1-dt1--s1";
str = str.Replace("--", "-");
string[] oArra = str.Split('-');
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
*/
}
如果是前者,可以这么写search--category--ct1--cn1--nav1_10_1050(-+[a-z]+\d+)*如果是后者,你要把结束字符前面的字符拿出来,要不然怎么判断到什么地方结束了呢?
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
*/