0

已经尝试了几个小时来解决这个问题。我想使用正则表达式来选择整个 div,包括嵌套的 div,请参见下面的示例字符串:

AA <div> Text1 </div> BB <div style=\"vertical-align : middle;\"> Text2 <div>Text 3</div> </div> CC

想要返回以下值

<div> Text1 </div>
<div style=\"vertical-align : middle;\"> Text2 <div>Text 3</div> </div>

我得到的关闭是使用以下代码,但只给了我每个 DIV

(?<BeginTag><\s*div.*?>)|(?<EndTag><\s*/\s*div.*?>)

任何帮助都会很棒。

4

1 回答 1

1

为了扩展我相当尖刻的评论,正则表达式不是解析任何类型 HTML 的好工具。只有在最简单的情况下才可行,即使那样,我也不推荐它。

您需要的是一个解析 HTML 的好工具。在 .NET 世界中,一个很好的库是HTMLAgilityPack或者可能是SGMLReader 项目

您确实需要花一点时间来学习 API,但这是值得的。

对于您展示的小片段,我认为对您来说最简单的 API 将是 SGMLReader。它可以像读取 XML 一样读取 HTML,这意味着您可以将其转换为 XDocument 并使用更好的 API。其代码可能如下所示:

string markup = "<html>AA <div> Text1 </div> BB <div style=\"vertical-align : middle;\"> Text2 <div>Text 3</div> </div> CC</html>";
XDocument doc;
using(var reader = Sgml.SgmlReader.Create(new StringReader(markup))) 
    doc = XDocument.Load(reader);

var rootLevelDivs = doc.Root.Elements("div");
foreach(var div in rootLevelDivs)
    Console.WriteLine(div);
于 2013-02-16T16:21:17.147 回答