日期:2014-05-17  浏览次数:20514 次

如下正则表达式已经实现主要功能,还有一点功能不知道怎么做请指点
本帖最后由 flyso 于 2013-04-19 14:41:03 编辑
如下正则表达式已经实现主要功能,还有一点功能不知道怎么做请指点
HTML字符串:
        string str1 = "ST___pid-0&sid-0&innername-title&format-text___ST  .......html.........  ST___pid-0&sid-2&innername-C__1_t&format-text___ST .......html......... ST___pid-0&sid-44&innername-C__1_mc1&format-checkboxlist___ST .......html......... ST___pid-0&sid-44&format-checkboxlist&innername-C44_1_mc___ST";

正则表达式
 var list = Regex.Matches(str1, @"(?is)ST_+(?=[^>]*?pid\-(?<pid>[^&_]+))(?=[^>]*?sid\-(?<sid>[^&_]+))(?=[^>]*?innername\-(?<innername>[^&]+))(?=[^>]*?format\-(?<format>[^&_]+)).*?_+ST").OfType<Match>().Select(t => new { pid = t.Groups["pid"].Value, sid = t.Groups["sid"].Value, innername = t.Groups["innername"].Value.Replace("___ST",""), format = t.Groups["format"].Value }).ToList();
        foreach (var obj in list)
        {
            Response.Write("pid:" + obj.pid + " sid:" + obj.sid + " innername:" + obj.innername + " format:" + obj.format + "<br />");
        }
现在的结果是:
pid:0 sid:0 innername:title format:text
pid:0 sid:2 innername:C__1_t format:text
pid:0 sid:44 innername:C__1_mc1 format:checkboxlist
pid:0 sid:44 innername:C44_1_mc format:checkboxlist


现在需要增加一点功能,就是在目前输出每个属性的值的基础上还要加一个输出以ST__开头...___ST结尾的整个字符串(就是正则分析的那个字符串整串字符)该怎么实现
最终结果就是
pid:0 sid:0 innername:title format:text ststr:ST___pid-0&sid-0&innername-title&format-text___ST

pid:0 sid:2 innername:C__1_t format:text ststr:ST___pid-0&sid-2&innername-C__1_t&format-text___ST

pid:0 sid:44 innername:C__1_mc1 format:checkboxlist ststr:
ST___pid-0&sid-44&innername-C__1_mc1&format-checkboxlist___ST

pid:0 sid:44 innername:C44_1_mc format:checkboxlist ststr:ST___pid-0&sid-44&format-checkboxlist&innername-C44_1_mc___ST

------解决方案--------------------
var list = Regex.Matches(str1, @"(?is)ST_+(?=[^>]*?pid\-(?<pid>[^&_]+))(?=[^>]*?sid\-(?<sid>[^&_]+))(?=[^>]*?innername\-(?<innername>[^&]+))(?=[^>]*?format\-(?<format>[^&_]+)).*?_+ST")
.OfType<Match>().Select(t => new { all=t.Groups[0].Value,pid = t.Groups["pid"].Value, sid = t.Groups["sid"].Value, innername = t.Groups["innername"].Value.Replace("___ST",""), format = t.Groups["format"].Value }).ToList();
        foreach (var obj in list)
        {
            Response.Write("pid:" + obj.pid + " sid:" + obj.sid + " innername:" + obj.innername + " format:" + obj.format +" "+obj.all+ "<br />");