读书人

正则表达是拼配有关问题 !

发布时间: 2012-04-14 17:14:21 作者: rapoo

正则表达是拼配问题 !!!

HTML code
 <ul class="e2"> <li> <a href='#' class='preview'><img src='#'/></a>     <a href="#" class="title">标题1</a> <span class="info"> <small>日期:</small>2012-04-04 18:35:11 <small>点击:</small>129 <small>好评:</small>5 </span>     <p class="intro"> 内容1</p>    </li><li> <a href='#' class='preview'><img src='#'/></a>    <b>[<a href='#'>类别</a>]</b> <a href="#" class="title">标题2</a> <span class="info"> <small>日期:</small>2012-04-04 12:56:34 <small>点击:</small>119 <small>好评:</small>4 </span>     <p class="intro"> 内容2</p>    </li> <li> <a href='#' class='preview'><img src='#'/></a>     <a href="#" class="title">标题3</a> <span class="info"> <small>日期:</small>2012-04-04 18:35:11 <small>点击:</small>129 <small>好评:</small>5 </span>     <p class="intro"> 内容3</p>    </li><li> <a href='#' class='preview'><img src='#'/></a>    <b>[<a href='#'>类别2</a>]</b> <a href="#" class="title">标题4</a> <span class="info"> <small>日期:</small>2012-04-04 12:56:34 <small>点击:</small>119 <small>好评:</small>4 </span>     <p class="intro"> 内容4</p>    </li></ul>


提取 标题1 标题2 标题3 标题4 和链接 有类别的也提取类别

[解决办法]
(?is)<li>.*?(\[<a[^>]*?>(?<type>[^<>]+)</a>\])?<a[^>]*?class=(['"]?)title\2>(?<title>[^<>]+)</a>.*?<p[^>]*?class=(['"]?)intro\3>(?<content>[^<>]+)</p>.*?</li>
[解决办法]
C# code
        string s = File.ReadAllText(Server.MapPath("~/test.txt"));        MatchCollection matches = Regex.Matches(s, @"(?is)(?<=<ul class=""e2"">.*?)(?:<b>\[<a href='#'>(?<类别>.*?)</a>\]</b>)?\s*<a href=""(?<href>.+?)"" class=""title"">(?<title>.+?)</a>(?=.*?</ul>)");        foreach (Match match in matches)        {            Response.Write(match.Groups["类别"].Value + "<br/>");            Response.Write(match.Groups["href"].Value + "<br/>");            Response.Write(match.Groups["title"].Value + "<br/></br>");        }
[解决办法]
C# code
void Main(){    var html=File.ReadAllText("c:\\csdn.txt");    foreach(Match m in Regex.Matches(html,@"(?is)<li>.*?(\[<a[^>]*?>(?<type>[^<>]+)</a>\].*?)?<a[^>]*?class=(['""]?)title\2>(?<title>[^<>]+)</a>.*?<p[^>]*?class=(['""]?)intro\3>(?<content>[^<>]+)</p>.*?</li>"))    {        Console.WriteLine("类别:{0}\t标题:{1}\t内容:{2}",m.Groups["type"].Value,m.Groups["title"].Value,m.Groups["content"].Value);    }    /*    类别:    标题:标题1    内容: 内容1    类别:类别    标题:标题2    内容: 内容2    类别:    标题:标题3    内容: 内容3    类别:类别2    标题:标题4    内容: 内容4    */}
------解决方案--------------------


抓取数据
常用正则,参考最后一条

读书人网 >C#

热点推荐