整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

「C#实战」一行代码搞定!高效移除HTML标签还原纯净文本

HTML文本中移除所有HTML标记并提取纯文本是我们经常需要使用的文本内容处理方式,比如搜索引擎、网站爬虫或者本地文档检索系统需要提取网页或HTML文档的实际内容进行索引。通过去除HTML标签,可以专注于实际的文字信息,提高搜索结果的相关性和准确性。在新闻聚合应用或社交媒体平台上展示网页链接的摘要时,通常会提取并显示纯文本内容以提供简洁的预览。对于视觉障碍人士使用的辅助技术如屏幕阅读器,它们无法解析复杂的HTML结构,因此需要提取纯文本以便朗读给用户。所以今天给大家分享一个使用正则表达式移除所有的Html标记的方法,供有需要的朋友们参考:

第一个核心代码是:正则表达式"<.*?>"

// 示例用法:

string inputHtml = "<html><body><h1>Hello, World!</h1>This is a <b>test</b>.</body></html>";

string plainText = RemoveHtmlTags(inputHtml);

Console.WriteLine(plainText); // 输出: "Hello, World!This is a test."

public static string RemoveHtmlTags(string html)

{

// 正则表达式用于匹配HTML标签

Regex regex = new Regex("<.*?>", RegexOptions.Singleline | RegexOptions.Compiled);

// 使用正则表达式的Replace方法移除所有匹配的HTML标签

string result = regex.Replace(html, String.Empty);

return result;

}

这个正则表达式<.*?>是非贪婪匹配任何以 < 开始、以 > 结束的字符串,它会尽可能少地匹配字符以找到每个HTML标签。

请注意,虽然此方法对于简单场景可能有效,但对复杂的HTML文档(特别是含有嵌套标签、注释、CDATA等内容)可能不够健壮,因为它无法处理所有可能的HTML结构。

第二个核心代码是:正则表达式"<[^>]*>"

public static string ExtractPlainTextFromHtml(string html)

{

// 使用正则表达式匹配所有的HTML标签

// 注意:这个简单的正则表达式适用于大多数基础HTML结构,但可能无法处理复杂嵌套或特殊格式的HTML

Regex regex = new Regex("<[^>]*>", RegexOptions.Singleline | RegexOptions.Compiled);

// 使用Replace方法去除所有匹配到的HTML标签,并返回纯文本内容

string plainText = regex.Replace(html, String.Empty);

return plainText.Trim(); // 为了得到更整洁的结果,可以对结果进行trim操作以去除多余的空白字符

}

在这段代码中,我们定义了一个名为ExtractPlainTextFromHtml的方法,该方法利用正则表达式 <[^>]*> 来查找并替换所有HTML标签。这里的正则表达式表示任何以 < 开始、以 > 结束的非空字符串(即HTML标签),Singleline 选项使.能匹配换行符,以便跨多行搜索标签,而 Compiled 选项则是为了优化正则表达式的性能。

第二个核心代码是:正则表达式"<[^>]*>"

public static string RemoveHtmlTags(string html)

{

// 正则表达式,匹配所有HTML标签

string pattern = "<[^>]+>";

// 使用Regex.Replace方法移除所有匹配的HTML标签

return Regex.Replace(html, pattern, String.Empty);

}

请注意,此方法仅移除HTML标记,不会解析或处理嵌入在HTML中的JavaScript代码或其他非标记内容。此外,此方法也无法处理不规范或不符合预期格式的HTML标记。如果需要更复杂的HTML解析或清理,您可能需要使用专门的HTML解析库,如AngleSharp或HtmlAgilityPack等。

尽管上述方法对于许多简单场景已经足够有效,但在面对复杂的HTML文档时,由于HTML本身的嵌套和特殊结构,简单的正则表达式可能无法完美地解析并移除所有标签。在这种情况下,推荐使用专门为处理HTML设计的库,如HtmlAgilityPack,它可以准确地解析HTML并提供丰富的API用于提取纯文本内容。

过上一章的内容,现在网页文件中,我们还须要去除的就是html代码了。

下面我们要研究一下html代码的主要特点,不管什么样的HTML代码,他们均被左右尖括号所包围,就像这个样子<代码>,因此,我们就有了去除的方法,把括号中的内容和联通括号一起去除掉,就可以了。

下面开始,根据我们的想法,可以写出,下面这样的主程序

看上图,再上一张定义的函数,我们把它移动到了通用函数库中

第21行,这是我们新增的代码,执行完这个代码,就去除掉了HTML标记,剩下的就应该是纯文字内容了。在这里,我们定义了一个函数,名字叫做去除html代码

下面我们研究一下,这个函数的内容,如下图

因为使用了正则表达式,因此,在程序运行前,必须导入模块re

第3行,导入我们所需要的re模块,我们想用到正则表达式

第5行,定义函数

第6行,用右尖括号分格隔成列表

第8行,对列表元素进行遍历

第9行,使用正则挑出有效的内容,其实就是去除以前孤立的右尖括号的内容。

第10行,对有效的内容进行左尖括号分隔

第11行,左尖括号前面的内容就是有效的文字内容

完整的程序如下

下面我们对程序进行下测试,在上一章中,程序运行后得到如下的内容(内容太长,只截取一小部分)

本次程序改造后,运行得到下面的内容


从上面两个图片可以看出,我们确实把文字内容提取出来了。

.处理前需要进入架包

<dependency>

<groupId>net.htmlparser.jericho</groupId>

<artifactId>jericho-html</artifactId>

<version>3.2</version>

</dependency>

2.工具类:

public static String getPlainTextWithoutHtmlTag(String content) {

if(content == null || "".equals(content)){

return "";

}else{

Source src = new Source(content);

String str = src.getTextExtractor().toString().trim();

return str.replaceAll(" ","").replaceAll(" ", "");

}

}

3.例子

处理前:<p style="text-align:left;">

王某某,副主任医师,上海中医药大学博士,南京军区南京总医院肾脏病研究所博士后,全国第四批名老中医学术继承人。擅长中西医结合治疗肾内科疾病,对各种原发性和继发性肾小球疾病的病理诊断与临床治疗、以及中早期慢性肾功能衰竭的“一体化”治疗积累了丰富经验,尤其对糖尿病肾病、<span>IgA</span><span>肾病、膜性肾病、狼疮性肾炎、局灶节段性肾小球硬化症、肥胖相关性肾病等疾病进行了深入研究。近年来发表学术论文十余篇,主持、参与科研课题五项。</span>

</p>

<p>

<br />

</p>

处理后:王某某,副主任医师,上海中医药大学博士,南京军区南京总医院肾脏病研究所博士后,全国第四批名老中医学术继承人。擅长中西医结合治疗肾内科疾病,对各种原发性和继发性肾小球疾病的病理诊断与临床治疗、以及中早期慢性肾功能衰竭的“一体化”治疗积累了丰富经验,尤其对糖尿病肾病、IgA肾病、膜性肾病、狼疮性肾炎、局灶节段性肾小球硬化症、肥胖相关性肾病等疾病进行了深入研究。近年来发表学术论文十余篇,主持、参与科研课题五项。

大家可关注我的博客,一起交流学习

原文:https://blog.csdn.net/weixin_42720002/article/details/91510797