从Div标签中提取内容C# RegEx

b1uwtaje  于 2023-05-01  发布在  C#
关注(0)|答案(2)|浏览(205)

我需要在divtestimonial1 div中提取此内容,我使用以下regEx,但它只返回第一行

Regex r = new Regex("&lt;div([^<]*<(?!/div>))");
<div class="testimonial_content" id="divtestimonial1">
          <a name="T1"></a>
          <div class="testimonial_headline">%testimonial1headline</div>
          <p align="left"><img src="" alt="" width="193" height="204" align="left" hspace="10" id="img_T1"/><span class="testimonial_text">%testimonial1text</span><br />
          </p>
  </div>
lyr7nygr

lyr7nygr1#

正则表达式通常不是解析HTML的好选择。您最好使用HTML Agility Pack之类的工具,因此我建议您使用它。
也就是说,您可以使用此Regex匹配特定的示例输入:

<div.*?id="divtestimonial1".*?>.*</div>

但它可能会在你的现实世界中崩溃。Regex和HTML的一个问题是正确地检测标签的嵌套等。

kt06eoxx

kt06eoxx2#

使用HtmlAgilityPack不是一个好的选择吗?

string input = "<div class=\"testimonial_content\" id=\"divtestimonial1\"><a name=\"T1\"></a><div class=\"testemonial_headline\">% testimonial1headline</div><p align=\"left\"><img src=\"\" alt=\"\" largura=\"193\" altura=\"204\" align=\"10\" id=/><br /></p></div>";
HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(input);
HtmlNode divNode = doc.DocumentNode.SelectSingleNode("//div[@id='divtestimonial1']");
if (divNode != null)
{
    string content = divNode.InnerHtml;
    Console.WriteLine(content);
}

结果:

<a name="T1"></a><div class="testemonial_headline">% testimonial1headline</div><p align="left"><img src="" alt="" largura="193" altura="204" align="10" id=/><br></p>

使用Regex。匹配它看起来像这样:

string input = "<div class=\"testimonial_content\" id=\"divtestimonial1\"><a name=\"T1\"></a><div class=\"testemonial_headline\">% testimonial1headline</div><p align=\"left\"><img src=\"\" alt=\"\" largura=\"193\" altura=\"204\" align=\"10\" id=/><br /></p></div>";
Match match = Regex.Match(input, "<div class=\"testimonial_content\" id=\"divtestimonial1\">(?<content>.*?)</div>");
if (match.Success)
{
    string content = match.Groups["content"].Value;
    Console.WriteLine(content);
}

相关问题