2011-05-03 59 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;