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

のコレクションを ID 値で返したい場合はdivs、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 に答える