如何去除html标签得到纯文本内容

如题所述

在网页刚流行起来的时候,提取html中的文本有一个简单的方法,就是将html文本(包含标记)中的所有以“<”符号开头到以“>”符号之间的内容去掉即可。
但对于现在复杂的网页而言,用这种方法提取出来的文本会有大量的空格、空行、script段落、还有一些html转义字符,效果很差。
下面用正则表达式来提取html中的文本,
代码的实现的思路是:
a、先将html文本中的所有空格、换行符去掉(因为html中的空格和换行是被忽略的)
b、将<head>标记中的所有内容去掉
c、将<script>标记中的所有内容去掉
d、将<style>标记中的所有内容去掉
e、将td换成空格,tr,li,br,p 等标记换成换行符
f、去掉所有以“<>”符号为头尾的标记去掉。
g、转换&,&nbps;等转义字符换成相应的符号
h、去掉多余的空格和空行
代码如下:

using System;
using System.Text.RegularExpressions;
namespace Kwanhong.Utilities
{
/// <summary>
/// HtmlToText çš„摘要说明。
/// </summary>
public class HtmlToText
{
public string Convert(string source)
{
string result;
//remove line breaks,tabs
result = source.Replace("\r", " ");
result = result.Replace("\n", " ");
result = result.Replace("\t", " ");
//remove the header
result = Regex.Replace(result, "(<head>).*(</head>)", string.Empty, RegexOptions.IgnoreCase);
result = Regex.Replace(result, @"<( )*script([^>])*>", "<script>", RegexOptions.IgnoreCase);
result = Regex.Replace(result, @"(<script>).*(</script>)", string.Empty, RegexOptions.IgnoreCase);
//remove all styles
result = Regex.Replace(result, @"<( )*style([^>])*>", "<style>", RegexOptions.IgnoreCase); //clearing attributes
result = Regex.Replace(result, "(<style>).*(</style>)", string.Empty, RegexOptions.IgnoreCase);
//insert tabs in spaces of <td> tags
result = Regex.Replace(result, @"<( )*td([^>])*>", " ", RegexOptions.IgnoreCase);
//insert line breaks in places of <br> and <li> tags
result = Regex.Replace(result, @"<( )*br( )*>", "\r", RegexOptions.IgnoreCase);
result = Regex.Replace(result, @"<( )*li( )*>", "\r", RegexOptions.IgnoreCase);
//insert line paragraphs in places of <tr> and <p> tags
result = Regex.Replace(result, @"<( )*tr([^>])*>", "\r\r", RegexOptions.IgnoreCase);
result = Regex.Replace(result, @"<( )*p([^>])*>", "\r\r", RegexOptions.IgnoreCase);
//remove anything thats enclosed inside < >
result = Regex.Replace(result, @"<[^>]*>", string.Empty, RegexOptions.IgnoreCase);
//replace special characters:
result = Regex.Replace(result, @"&", "&", RegexOptions.IgnoreCase);
result = Regex.Replace(result, @" ", " ", RegexOptions.IgnoreCase);
result = Regex.Replace(result, @"<", "<", RegexOptions.IgnoreCase);
result = Regex.Replace(result, @">", ">", RegexOptions.IgnoreCase);
result = Regex.Replace(result, @"&(.{2,6});", string.Empty, RegexOptions.IgnoreCase);
//remove extra line breaks and tabs
result = Regex.Replace(result, @" ( )+", " ");
result = Regex.Replace(result, "(\r)( )+(\r)", "\r\r");
result = Regex.Replace(result, @"(\r\r)+", "\r\n");
return result;
}
}//end class
}//end namespace
温馨提示:内容为网友见解,仅供参考
无其他回答

怎样把带html格式的内容转换成纯文本的文字
如果你想复制网页上的内容,直接复制然后粘贴到记事本里就是纯文本内容,如果你的是一个html原文件,不知道你有没有一个编辑器,记事本不算,word好像也可以的,用替换功能,一般的编辑器都有正则替换的,直接替换 <(.*)>,替换成空,现在所有的标签都会被替换掉的 ...

怎么让HTML显示纯文本
方法二:采用api形式,先倒入jar包htmllexer.jar,htmlparser.jar,sitecapturer.jar,thumbelina.jar,filterbuilder.jar :public static String getHtmlText(String htmlContent) throws Exception {if(htmlContent==null)htmlContent="";\/\/ 增加一个<br\/>,经测试,如果正文为纯文本,org.htmlparser会把...

asp.net c# 怎么将html转换为纯文本
简单的方法,复制到记事本里粘贴,然后再复制到ckeditor里,这样一般就没有html标签了,如果再有 可能也只是有一个P标签 ,切换到html状态下 删了就是了,当然另外有更好的方法就是在提交数据的时候,过滤HTML标签

如何将html实体转换成中文汉字
可以使用在线HTML\/JS\/CSS代码过滤工具。效果如图。本工具可以帮助你过滤掉文本中的html代码、js代码、css代码,生成干净的纯文本,也可以自己定义要替换的代码进行过滤。希望可以帮到您~

html富文本编辑器,复制的标签如何处理
可以通过纯文本粘贴功能,将复制的标签转换成纯文本格式,再根据需要添加格式和样式。另外,也可以使用html清理工具,将复制的标签中的不必要的元素和样式进行过滤和清理,保留必要的内容和样式。这样可以确保编辑器中的内容格式干净整洁,符合预期。

html 读取本地文本文件的内容,显示在select的下拉列表中
如果你的txt文件是在服务器上,你可以用很多方法把TXT文件中的html标签除掉后显示出纯文本内容。参考一下下面代码:<iframe src="a.txt" name=iframe1><\/iframe> <div id=div1><\/div> <script> \/\/在iframe1中已经显示有TXT文本的内容,下面代码是把TXT中的内容中的HTML标记取消,只取得文本 va...

如何截取html语言的第一行,类似显示摘要。
第一步:用正则把这段html内容的html标签全部清除掉,变成纯文本!第二步:截取你的内容(比如说,截取第一个句号之前的内容,这个就看你的具体要求了!)

请问使用editor时读取数据的时候去掉HTML标签,主要纯文本!
思路,把数据库里的内容保存成HTML文件,再使用JAVASCRIPT把内容得到后,再回写到数据库中,test.html <html> <head> <title>test.html<\/title> <script type="text\/javascript"> function getContent() { var divTags = document.getElementsByTagName("div");var contents;for(var i in divTags...

如何提取正文内容 BeautifulSoup的输出
清理完成后,这个包有一个prettify()函数,把代码格式给搞的标准一些:soup.prettify()然后用正则表达式,把所有的HTML标签全部清理了:reg1 = re.compile("<[^>]*>")content = reg1.sub('',soup.prettify())剩下的都是纯文本的文件了,通常是一行行的,把空白行给排除了,这样就会知道总计有...

如何消除文本自带格式
首先,识别文本的来源和编辑环境。如果文本来源于Word、WPS等文档处理软件,通常可以通过“另存为”功能,选择纯文本(.txt)格式进行保存,这样会自动去除原有格式,包括表格、图片等。对于网页内容,可以使用浏览器的“查看页面源代码”功能,但这种方法获取的是HTML代码,需要进一步处理才能得到纯文本。其次...

相似回答