可以匹配的是采用这种regex,具有非固定宽度的外观,背后的DIV标签内(感谢.NET正则表达式引擎):
(?s)(?<=<div\s[^>]*?class=["']?important-contents["']?[^>]*?>).*?(?=</div>)
然后,去除所有标签,你可以使用this regex删除匹配的DIV内容中的所有标签:
</?[^>]+>
要删除<script>
标记,可能会发现自己的方式向DIV标签,下面我们来介绍另一步:
(?s)<script[^>]*?>.*?</script>
我不知道匹配不连续文本的方法,因此只能在{2,}步骤中完成。
免责声明:如果您的HTML格式不正确,您可能会得到更奇怪的结果,或者根本不匹配。
示例代码:
var div_rgx = new Regex(@"(?si)(?<=<div\s[^>]*?class=[""']?important-contents[""']?[^>]*?>).*?(?=</div>)");
var tag_rgx = new Regex(@"</?[^>]+>");
var script_rgx = new Regex(@"(?s)<script[^>]*?>.*?</script>");
var txt = "<html>\r\n<body>\r\n<div class='important-contents'>\r\n<script>function getV(str) { return 0; }</script>\r\n<span>My <i>text</i><font face=\"Verdana\">.</font></span>\r\n</div>\r\n</body>\r\n</html>";
var result = div_rgx.Match(txt);
if (result.Success)
var final = tag_rgx.Replace(script_rgx.Replace(result.Value, string.Empty), string.Empty).Trim();
输出:
我不认为正则表达式是这里的最佳路线,也有从内存中,可以得到标签的内容HTML类... –
请肯定要阅读[RegEx match open tags but XHTML self-contained tags](http:// stackoverflow。com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags /)来构建合理的RegEx。 –
@AustinFrench显然不是。但OP应该已经知道了(有很多HTML和C#的问题和答案)。所以虽然像HtmlAgilityPack这样的东西绝对是一种好方法,但我认为这应该作为一个练习来创建正则表达式... –