2012-09-12 26 views
0

如何通過正則表達式在C#中清理HTML特殊標記?如何通過C#中的Regex從任何特殊標記中清除HTML?

下面是一個簡單的HTML,其中Ineed刪除<font size="-2">

R&amp;usg=AFQjCNFYiDC6u3xOGn4JpO-GF83PjdSbtw&amp;url=http://online.wsj.com/article/SB10000872396390444426404577647060576633348.html"><img src="//nt2.ggpht.com/news/tbn/bm6jvTMtF-PpnM/6.jpg" alt="" border="1" width="80" height="80" /><br /><font size="-2">Wall Street Journal</font></a></font> 
      </td> 

我知道我們必須以某種方式使用正則表達式,但我想不出我們如何使用它。

我試圖調整此方法,但它清除所有標記。

public string Strip(string text) 
{ 
    return Regex.Replace(text, @」<(.|\n)*?>」, string.Empty); 
} 

其實我期待一些方法來做這樣

public string Strip(string text, HTMLTags.Font) 
{ 

} 

其中HTMLTags.Font是一些HTML標籤的

enum HTMLTags 
{ 
    Font, 
    Div, 
    Td 
    ... 
} 

謝謝你的任何線索,一個枚舉! !

+3

標準答案:不要使用正則表達式的HTML,使用SgmlReader或HTML敏捷性包。 –

+1

真正簡單(並且靈活)的方法是將標記名放在正則表達式中的第一個<<之後。 – Matthew

+0

@Mthethew但是如果標籤看起來像FONT Font字體呢? – Terminador

回答

3

使用HtmlAgilityPack解析HTML

HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument(); 
doc.LoadHtml(html); 

foreach (var font in doc.DocumentNode.Descendants("font").ToArray()) 
{ 
    font.Remove(); 
} 
+0

你能告訴我如何從doc對象中獲得清潔的html嗎? – Terminador

+1

@Terminador'doc.DocumentNode.InnerHtml' –

+0

對不起,但它只是HTML沒有任何純文本reterns。所以文本丟失了......這很奇怪... – Terminador

2

最好的,這應該是Html Agility Pack

這不是一個正則表達式,但解析器對「真實世界」格式錯誤的HTML非常寬容。

1

儘管HTMLAgilityPack最有可能是最佳選項(因爲它允許您針對DOM表示HTML執行LINQ查詢和/或XPath查詢)。一開始可能是以下幾點:

public static class HTMLTags 
{ 
    public string Font { get { return "<font>" } } 
    public string Div { get { return "<div>" } } 
    public string Td { get { return "<td>" } } 
} 

那麼,在您的客戶端代碼:

public string Strip(string text, HTMLTags.Font) 
{ 
    /* string parse/replace occurances of HTMLTags.Font */ 
} 
相關問題