首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

艰难的正则表达式分析截取字符串

2012-10-21 
困难的正则表达式分析截取字符串有一篇网页源代码,段落是比较规律的。我提取了其中一段,别的都和这一段基本

困难的正则表达式分析截取字符串
有一篇网页源代码,段落是比较规律的。我提取了其中一段,别的都和这一段基本相似。如下:

xxxxxxxx随机内容<a href="read-htm-tid-8012348(需要提取8012348这个可变数字,前面的a href-read-htm-tid-字符串是固定的,可以用于定位).html" id="a_ajax_8012348(无用数据)">一只绣眼文章标题(需要提取该文字)</a></span></h3> <span class='gray tpage'>( +9352 )</span> <img src="images/wind/file/new.gif" align="absmiddle" /> <span class="tpage">....中间很多无用数据.......d-8012348-page-11-fpage-1.html">11</a></span> </span> </td> <td class="tal y-style"><a href="u-htm-action-show-uid-278024.html" class="bl">老海人名(需要提取该文字)</a> <div class="f10 gray2">2012-10-12(需要提取该文字)</div></td> <td class="tal y-style f10"><span class="s8(这里是固定的,可以定位)">107(需要提取该数字)</span> / 795(需要提取该数字)</td>随机内容xxxxxxxx

我需要提取6个关键的地方,分别是:

8012348
一只绣眼文章标题
老海人名
2012-10-12
107
795

注意:
1)源代码中,795和斜杠前面,都是有空格的,并非我故意加入的空格。
2) 2012-10-12字符串前面的<div class="f10 gray2">是固定的,可以用于定位。
3)要求必须用正则,因为我要提取很大一段网页源代码类似的。不用正则提取不出来。

我用的正则格式如下:
foreach (Match m in Regex.Matches(zifuchuan, "正则")
{
m.Groups[1].Value.ToString();
}


[解决办法]

C# code
        string zifuchuan = @"xxxxxxxx随机内容<a href=""read-htm-tid-8012348.html"" id=""a_ajax_8012348"">一只绣眼文章标题</a></span></h3> <span class='gray tpage'>( +9352 )</span> <img src=""images/wind/file/new.gif"" align=""absmiddle"" /> <span class=""tpage"">....中间很多无用数据.......d-8012348-page-11-fpage-1.html"">11</a></span> </span> </td> <td class=""tal y-style""><a href=""u-htm-action-show-uid-278024.html"" class=""bl"">老海人名</a> <div class=""f10 gray2"">2012-10-12</div></td> <td class=""tal y-style f10""><span class=""s8"">107</span> / 795</td>随机内容xxxxxxxx";        foreach (Match m in Regex.Matches(zifuchuan, @"(?is)<a href=""read-htm-tid-\d+\.html""[^>]*>(.*?)</a>.+?<a href=""u-htm-action-show-uid-\d+\.html"" class=""bl"">(.*?)</a>\s*<div class=""f10 gray2"">(.*?)</div>.*?<span class=""s8"">(\d+)</span>\s*/\s*(\d+)</td>"))        {            Response.Write(m.Groups[1].Value + "<br/>");            Response.Write(m.Groups[2].Value + "<br/>");            Response.Write(m.Groups[3].Value + "<br/>");            Response.Write(m.Groups[4].Value + "<br/>");            Response.Write(m.Groups[5].Value + "<br/>");        }
[解决办法]
C# code
 string html = @"xxxxxxxx随机内容<a href=""read-htm-tid-8012348.html"" id=""a_ajax_8012348"">一只绣眼文章标题</a></span></h3> <span class='gray tpage'>( +9352 )</span> <img src=""images/wind/file/new.gif"" align=""absmiddle"" /> <span class=""tpage"">....中间很多无用数据.......d-8012348-page-11-fpage-1.html"">11</a></span> </span> </td> <td class=""tal y-style""><a href=""u-htm-action-show-uid-278024.html"" class=""bl"">老海人名</a> <div class=""f10 gray2"">2012-10-12</div></td> <td class=""tal y-style f10""><span class=""s8"">107</span> / 795</td>随机内容xxxxxxxx";        foreach (Match m in Regex.Matches(html , @"(?is)<a\s*href=""read-htm-tid-(?<num>\d+)\.html""[^>]*?>(?<acontent>.*?)</a>.+?<a\s*href=""u-htm-action-show-uid-\d+\.html""[^>]*?class=""bl"">(?<bcontent>.*?)</a>\s*<div\s*class=""f10 gray2"">(?<divcontent>.*?)</div>.*?<span\s*class=""s8"">(?<snum>\d+)</span>\s*/\s*(?<snum1>\d+)</td>"))        {            Response.Write(m.Groups["num"].Value + "<br/>");            Response.Write(m.Groups["acontent"].Value + "<br/>");            Response.Write(m.Groups["bcontent"].Value + "<br/>");            Response.Write(m.Groups["divcontent"].Value + "<br/>");            Response.Write(m.Groups["snum"].Value + "<br/>");            Response.Write(m.Groups["snum1"].Value + "<br/>");        }/*8012348一只绣眼文章标题老海人名2012-10-12107795*/ 

热点排行