可以匹配的是採用這種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這樣的東西絕對是一種好方法,但我認爲這應該作爲一個練習來創建正則表達式... –