正则表达式选择整个外部DIV

时间:2013-02-16 15:55:09

标签: c# regex

一直在努力解决这个问题。我想使用正则表达式来选择整个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.*?>)

任何帮助都会很棒。

1 个答案:

答案 0 :(得分:1)

To expand on my rather snarky comment ,正则表达式不是解析任何类型HTML的好工具。只有在最简单的情况下它才是可行的,即便如此,我也不会推荐它。

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

您需要花一点时间来学习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);
相关问题