0

嗨,我对正则表达式很陌生,我需要一些帮助来写这篇文章,或者至少让我开始。

我想获取页面上的所有 div 并将它们放入字符串集合中

<和div之间可能有空格,</div>之间可能有空格谢谢

我已经尝试过 htmlaggilitypack 但遇到了问题,这就是我要这样做的原因

Dim reg As Regex = New Regex("<div(.*?)> </div")

Dim matches As string() = reg.Matches(htmlCode)




<div id="out">

    <div id="one">
        < div id="b"></div>
        <   div id="d"></div>
    </div>

    <div     id="two">
        <h1>fsdfsdf</h1>
        <  div id="a"><div id="a"></div></div>
    < /  div  >

</div>
4

2 回答 2

2

如果divs要按 ID 值返回集合,则可以将以下内容与 HMTL 敏捷包一起使用:

protected void Page_Load(object sender, EventArgs e)
{
     List<HtmlAgilityPack.HtmlNode> divs = GetDivsInner();

     foreach (var node in divs)
     {
          Response.Write("Result: " + node.InnerHtml.ToString());
     }

}

public List<HtmlAgilityPack.HtmlNode> GetDivsInner()
{
      HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();

      doc.OptionFixNestedTags = true;
      doc.Load(requestData("YOUR URL HERE"));

      var divList = doc.DocumentNode.Descendants("div").Where(d => d.Attributes.Contains("id") && d.Attributes["id"].Value.Contains("YOUR ID VALUE")).ToList();

      return divList;
}

public StreamReader requestData(string url)
{
      HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
      HttpWebResponse resp = (HttpWebResponse)req.GetResponse();

      StreamReader sr = new StreamReader(resp.GetResponseStream());

      return sr;
}
于 2012-07-20T09:09:38.780 回答
1

尝试

<\s*div.*>(.|\n)*<\s*/\s*div>  

作为您的正则表达式模式。已经用以下测试它并且它匹配所有

<div id='d'>
  dsfdsfs

  dsfdfd

</div>
< div >dave </div>
<div>home </ div>
<p></p>

但是,如果您想对其进行调整,则互联网上有一些很棒的工具可以测试您的正则表达式

http://www.regextester.com/

http://derekslager.com/blog/posts/2007/09/a-better-dotnet-regular-expression-tester.ashx

于 2012-07-20T09:08:02.107 回答