2011-05-03 33 views
19

從HTML字符串獲取純文本字符串的最佳方法是什麼?從.NET中以HTML格式獲取純文本

public string GetPlainText(string htmlString) 
{ 
    // any .NET built in utility? 
} 

在此先感謝

+0

的羣衆演員,你有什麼用純文本意思? – slandau 2011-05-03 13:48:38

+0

@slandau:我想從HTML輸入中輸出可讀的文本。我不知道是否有額外的刪除標籤... – 2011-05-03 13:52:11

回答

19

有公用事業沒有內置據我所知,但根據您的需求,您可以使用正則表達式去掉所有的標籤:

string htmlString = @"<p>I'm HTML!</p>"; 
Regex.Replace(htmlString, @"<(.|\n)*?>", ""); 
+3

/我去隱藏 – 2011-05-03 13:52:07

+4

檢查這個史詩般的問題http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml- self-contained-tags – Andrey 2011-05-03 13:57:11

+0

@Andrey哈哈這是一個非常棒的接受答案。幸運的是,OP沒有說明確切的需求,也沒有定義HTML字符串,因此它應該能夠捕捉大多數實際的HTML情況,而不是XHTML。 – 2011-05-03 14:00:08

1

沒有.NET內置的方法來做到這一點。但是,就像@rudi_visser指出的那樣,它可以用正則表達式完成。

如果您需要刪除的不僅僅是更多的標籤(即轉&ampacirc;â),你可以使用更詳盡的解決方案,如發現here

5

框架中沒有內置的解決方案。

如果您需要解析HTML,我使用名爲HTML Agility Pack的庫提供了很好的體驗。
它分析一個HTML文件並提供DOM的訪問權限,類似於XML類。

30

你可以使用MSHTML,它可以相當寬容;嶺

//using microsoft.mshtml 
HTMLDocument htmldoc = new HTMLDocument(); 
IHTMLDocument2 htmldoc2 = (IHTMLDocument2)htmldoc; 
htmldoc2.write(new object[] { "<p>Plateau <i>of<i> <b>Leng</b><hr /><b erp=\"arp\">2 sugars please</b> <xxx>what? &amp; who?" }); 

string txt = htmldoc2.body.outerText; 

高原2個糖討好什麼? &誰?

+0

工程就像一個魅力!應該是被接受的答案。請注意,您需要首先添加對「Microsoft.mshtml.dll」的引用。 – 2016-07-05 14:09:36

+0

您確定此方法對來自不受信任來源的HTML安全嗎? HTMLDocument.Write()是否執行傳遞的腳本? – 2016-11-16 17:20:12

+0

這個答案比接受的答案(只使用簡單的正則表達式去除標籤)要穩健得多,而且對於任何合理複雜的頁面來說可能都是必要的。 – 2016-11-16 22:00:27

1

就我個人而言,我發現正則表達式和HttpUtility的組合是最好的和最短的解決方案。

Return HttpUtility.HtmlDecode(
       Regex.Replace(HtmlString, "<(.|\n)*?>", "") 
       ) 

這將刪除所有的標籤,然後解碼任何類似&lt;&gt;