一直在努力解决这个问题。我想使用正则表达式来选择整个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.*?>)
任何帮助都会很棒。
答案 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);