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

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

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"">老海