欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

asp.net正則表達(dá)式刪除指定的HTML標(biāo)簽的代碼

 更新時(shí)間:2010年09月13日 00:14:20   作者:  
抓取某網(wǎng)頁(yè)的數(shù)據(jù)后(比如描述),如果照原樣顯示的話,可能會(huì)因?yàn)樗锩姘瑳](méi)有閉合的HTML標(biāo)簽而打亂了格式,也可能它里面用了比較讓人 費(fèi)解 的HTML標(biāo)簽,把預(yù)訂的格式攪亂.
如果全盤刪除里面的 HTML 標(biāo)簽,可能會(huì)造成閱讀上的困難(比如 a, img 這些標(biāo)簽), 最好是刪除一部分,保留一部分.

正則表達(dá)式里,判斷 包含某些字符串 是非常容易理解的,但是如何判斷 不包含某些字符串 (是字符串,不是字符,是某些,不是某個(gè)) 確實(shí)是個(gè)費(fèi)解的事.
復(fù)制代碼 代碼如下:

<(?!((/?\s?li)|(/?\s?ul)|(/?\s?a)|(/?\s?img)|(/?\s?br)|(/?\s?span)|(/?\s?b)))[^>]+>

這個(gè)正則是判斷HTML標(biāo)簽不包含 li / ul / a / img / br / span / b 的,就上面的要求來(lái)說(shuō),是要 刪除 除這里列出的HTML標(biāo)簽,這也是我摸索了很長(zhǎng)時(shí)間才搞出來(lái)的.
(?!exp) 匹配后面跟的不是exp的位置
/?\s? 我一開(kāi)始試著把它寫到最前面的 < 后面,但是測(cè)試失敗了.

下面是一個(gè)簡(jiǎn)單的函數(shù),把要保留的TAG串起來(lái),生成一個(gè)正則表達(dá)式,然后把不需要的TAG刪除...
復(fù)制代碼 代碼如下:

private static string RemoveSpecifyHtml(string ctx) {
string[] holdTags = { "a", "img", "br", "strong", "b", "span" };//要保留的 tag
// <(?!((/?\s?li)|(/?\s?ul)|(/?\s?a)|(/?\s?img)|(/?\s?br)|(/?\s?span)|(/?\s?b)))[^>]+>
string regStr = string.Format(@"<(?!((/?\s?{0})))[^>]+>", string.Join(@")|(/?\s?", holdTags));
Regex reg = new Regex(regStr, RegexOptions.Compiled | RegexOptions.Multiline | RegexOptions.IgnoreCase);


return reg.Replace(ctx, "");
}

修正:
上面的正則,如果保留了 li , 實(shí)際運(yùn)行會(huì)發(fā)現(xiàn) link 也給保留下來(lái)了, 保留 a 會(huì)把 addr 也給保留下來(lái), 解決辦法就是加 \b 斷言.
復(fù)制代碼 代碼如下:

<(?!((/?\s?li\b)|(/?\s?ul)|(/?\s?a\b)|(/?\s?img\b)|(/?\s?br\b)|(/?\s?span\b)|(/?\s?b\b)))[^>]+>

private static string RemoveSpecifyHtml(string ctx) {
string[] holdTags = { "a", "img", "br", "strong", "b", "span", "li" };//保留的 tag
// <(?!((/?\s?li\b)|(/?\s?ul\b)|(/?\s?a\b)|(/?\s?img\b)|(/?\s?br\b)|(/?\s?span\b)|(/?\s?b\b)))[^>]+>
string regStr = string.Format(@"<(?!((/?\s?{0})))[^>]+>", string.Join(@"\b)|(/?\s?", holdTags));
Regex reg = new Regex(regStr, RegexOptions.Compiled | RegexOptions.Multiline | RegexOptions.IgnoreCase);

return reg.Replace(ctx, "");
}

相關(guān)文章

最新評(píng)論