正则表达式与条件html标记

时间:2017-08-21 19:21:48

标签: c# regex

我需要编写一个Regex来捕获特定HTML标记内的内容:

<span class="sentences">CAPTURE HERE</span>

所以我在C#写道:

<span class=\"sentence\">((.|\\\\s)*?)</span>

我遇到的问题并且我不确定如何解决它,该范围内还有另一个span类,也以&lt; / span&gt;结尾因此结束了对错误结束标记的捕获。如何在Regex中编写一个条件,检查是否有另一个不是“句子”的span类,如果有,则捕获应该在下一个&lt; / span&gt;上结束?

Regex上的输入字符串。

<span class="sentence">O que a história da escravidão tem a dizer sobre <span class="CharOverride-15">experiências religiosas</span>?</span><span class="sentence"> Só silêncios,</span>

我想要理想的捕获:

O que a história da escravidão tem a dizer sobre <span class="CharOverride-15">experiências religiosas</span>? Só silêncios,

2 个答案:

答案 0 :(得分:1)

不要使用Regex来解析html。使用真正的html解析器,如HtmlAgilityPack

var doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(htmlstring);
var span = doc.DocumentNode.SelectSingleNode("//span[@class='sentence']");
var text = span.InnerText;
var html = span.InnerHtml;

答案 1 :(得分:0)

作为练习(首选html解析库),这里有一个可以使用或不使用嵌套标记进行解析的正则表达式:

<([^>]+)(?:\s+[^>]*)?>[^<>]*?(?:<([^>]+)(?:\s+[^>]*)?>)?(?<capture>[^<>]+)(?:<\/\2>)?[^<>]*?<\/\1>

Chrome Dev Tools console - printWasted() partial result