如何在 C# 中轻松从 HTML 中提取纯文本

一.介绍

处理 HTML 内容通常需要提取纯文本以进行处理、分析或显示,而不会产生 HTML 标记的杂乱。在本博客中,我们将探索一种简单而有效的方法,即使用 C# 中的正则表达式 (Regex) 来剥离 HTML 标记并将 HTML 实体解码为纯文本。此技术在读取网页抓取内容、清理电子邮件格式或为机器学习预处理准备文本数据等场景中特别有用。

二.问题陈述

HTML 内容是为网络浏览器设计的,不适用于直接的文本处理。由于 HTML 标签的嵌套和复杂性质,仅提取文本部分可能很棘手。开发人员需要一种可靠的方法来高效地将 HTML 转换为纯文本。

三.解决方案概述

我们将使用 C# Regex.Replace 方法删除 HTML 标签,并使用 System.Net.WebUtility.HtmlDecode 将 HTML 编码实体解码为其文本等效项。此方法提供了一种从 HTML 中提取干净文本的快速而准确的方法。

四.定义文本提取方法

首先,我们将创建一个接受包含 HTML 的字符串并返回清理后的纯文本字符串的方法。
代码演练

using System;
using System.Text.RegularExpressions;public class Program
{public static void Main(){// 定义一个包含 HTML 内容的字符串string htmlContent = "<p>Hello <b>World!</b></p>";// 调用 ExtractTextFromHtml 方法从 HTML 中提取纯文本string plainText = ExtractTextFromHtml(htmlContent);// 输出提取的纯文本内容Console.WriteLine(plainText); // 输出: Hello World!}// 定义一个从 HTML 中提取纯文本的静态方法public static string ExtractTextFromHtml(string html){// 如果输入的 HTML 字符串为空,返回空字符串if (html == null){return "";}// 使用正则表达式替换所有 HTML 标签为一个空格string plainText = Regex.Replace(html, "<[^>]+?>", " ");// 解码 HTML 实体并去除前后空格plainText = System.Net.WebUtility.HtmlDecode(plainText).Trim();// 返回处理后的纯文本return plainText;}
}

五.解释

  • **输入验证:**该函数首先检查输入的 html 字符串是否为空。如果为空,则返回一个空字符串,确保该方法在传递 null 时不会引发异常。
  • **正则表达式替换:**使用 Regex.Replace 删除所有 HTML 标记。模式 <[^>]+?> 匹配以 < 开头、后跟一个或多个非 > 字符并以 > 结尾的任何序列。这些序列被空格替换,确保先前由 HTML 标记分隔的单词不会被连接在一起。
  • **解码 HTML 实体:**剥离的文本可能仍包含 HTML 实体(如 &、< 等)。System.Net.WebUtility.HtmlDecode 用于将这些实体转换回其各自的字符。
  • **修剪:**最后,使用 Trim 从生成的纯文本中删除任何前导或尾随空格。

六.结论

通过遵循上述步骤,开发人员可以使用 C# 中基于正则表达式的简单方法有效地从 HTML 内容中提取文本。此功能对于需要处理或显示从 HTML 源中提取的文本的应用程序至关重要,可确保数据的清晰度和可用性。

本指南针对文本处理中常见的问题提供了实用的解决方案,可作为您开发工具包的宝贵补充。无论您是在处理网页抓取、数据清理还是内容管理系统,了解如何高效地将 HTML 转换为纯文本都是一项关键技能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/24435.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ForceMode应用力的不同模式

1. ForceMode.Force 解释: 这种模式下&#xff0c;力被持续应用&#xff0c;类似于施加一个恒定的加速度。应用场景: 适用于需要不断施加力的情况&#xff0c;如推动物体。公式: F m * a&#xff08;质量*加速度&#xff09;效果: 施加的力会被乘以 Time.deltaTime&#xff0…

Plotly : 超好用的Python可视化工具

文章目录 安装&#xff1a;开始你的 Plotly 之旅基本折线图&#xff1a;简单却强大的起点带颜色的散点图&#xff1a;数据的多彩世界三维曲面图&#xff1a;探索数据的深度气泡图&#xff1a;让世界看到你的数据小提琴图&#xff1a;数据分布的优雅展现旭日图&#xff1a;分层数…

虚拟机与windows文件同步

如果上图中不能设置&#xff0c;则在虚拟机mnt文件夹执行以下命令&#xff1a;

项目质量保证措施(Word原件)

一、 质量保障措施 二、 项目质量管理保障措施 &#xff08;一&#xff09; 资深的质量经理与质保组 &#xff08;二&#xff09; 全程参与的质量经理 &#xff08;三&#xff09; 合理的质量控制流程 1&#xff0e; 质量管理规范&#xff1a; 2&#xff0e; 加强协调管理&…

超详解——Python模块文档——小白篇

目录 1. Unix起始行 示例&#xff1a; 2. 对象和类型 示例&#xff1a; 3. 一切都是对象 示例&#xff1a; 4. 理解对象和引用 示例&#xff1a; 5. 理解对象和类型 示例&#xff1a; 6. 标准类型 示例&#xff1a; 7. 其他内建类型 示例&#xff1a; 8. 类型的类…

【乐吾乐2D可视化组态编辑器】在线使用,快速入门

一、在线使用 乐吾乐2D可视化组态编辑器地址&#xff1a;https://2d.le5le.com/ 二、步骤 本教程将带领你快速体验2D可视化编辑器的全流程开发。 1.创建图纸 进入2d编辑器主界面后&#xff0c;主界面最中心为图纸面板&#xff0c;默认为空图纸&#xff0c;在界面左侧为组…

数仓SQL如何做code review?

第一步应该是先明确需求&#xff0c;明确完需求以后在进行开发&#xff0c;接着code review 在明确HiveSQL、SparkSQL的编写需求后&#xff0c;接下来将详细介绍代码审查&#xff08;Code Review&#xff09;时的一些关键注意点&#xff1a; 1. 关联关系 left join 和 join …

AI魔法相机:实时3D重建与场景魔法化

一、产品概述 AI魔法相机是一款创新的硬件产品,它结合了AI技术和3D重建扫描技术,能够实时捕捉并重建3D场景和物理世界。用户只需通过简单的点击操作,即可捕捉现实物体或环境,并将其无缝融合到任何场景中,创造出全新的想象现实。 二、核心功能 实时捕捉:一键式操作,迅速…

用例与用例之间的三种关系:泛化、包含、扩展

UML用例图&#xff08;Use Case Diagrame)&#xff0c;是UML图的一种&#xff0c;主要用来描述角色及角色与用例之间的连接关系。 1.泛化 当多个用例共有一种类似的结构和行为时。能够将他们的共性抽象成为父用例&#xff0c;其它的用例作为泛化关系的子用例。箭头指向父用例…

优先队列的实现:基于最小堆的 Java 实现

优先队列是一种重要的数据结构&#xff0c;与普通队列不同&#xff0c;它每次从队列中取出的是具有最高优先级的元素。本文将介绍如何使用最小堆来实现优先队列&#xff0c;并提供详细的 Java 代码示例和解释。 什么是优先队列&#xff1f; 优先队列是一种抽象数据类型&#…

使用Aspose技术将Excel/Word转换为PDF

简介&#xff1a;本文将介绍如何使用Aspose技术将Excel文件转换为PDF格式。我们将使用Aspose-Cells-8.5.2.jar包&#xff0c;并演示Java代码以及进行测试。 一、Aspose技术概述 Aspose是一款强大的文档处理库&#xff0c;支持多种编程语言&#xff0c;如Java、C#、Python等。…

关于 spring boot 的 目录详解 和 配置文件 以及 日志

目录 配置文件 spring boot 的配置文件有两种格式&#xff0c;分别是 properties 和 yml&#xff08;yaml&#xff09;。这两种格式的配置文件是可以同时存在的&#xff0c;此时会以 properties 的文件为主&#xff0c;但一般都是使用同一种格式的。 格式 properties 语法格…

小程序中用于跳转页面的5个api是什么?区别

小程序中用于跳转页面的5个API及其区别如下&#xff1a; wx.navigateTo(options) 功能&#xff1a;保留当前页面&#xff0c;跳转到应用内的某个页面&#xff0c;使用wx.navigateBack可以返回到原页面。特性&#xff1a;可以打开新的页面&#xff0c;新页面可以是tabBar页面&a…

【Python】selenium 点击某个按钮 click() 出现的报错问题--ElementClickInterceptedException(全!)

写在前面&#xff1a; 我们在使用selenium 点击某个元素时或者获取find_element的某个网页元素时&#xff0c;总会遇到一些问题。本人经验是&#xff0c;最直接的方法是用try_except 报错&#xff0c;直接绕过问题&#xff0c;可以直接看第一条。如果有兴趣具体解决&#xff0c…

[Algorithm][动态规划][01背包问题][模板 背包][分割等和子集]详细讲解 +何为背包问题?

目录 0.何为背包问题&#xff1f;1.模板 背包1.题目链接2.算法原理详解3.代码实现 2.分割等和子集1.题目链接2.算法原理详解3.代码实现 0.何为背包问题&#xff1f; 背包问题&#xff1a;有限制条件下的"组合问题" 你有一个背包&#xff0c;地上有一堆物品&#xff…

ASP .NET Core 中的 Autofac 依赖注入

介绍 Autofac 是适用于 .NET 应用程序&#xff08;包括 ASP.NET Core&#xff09;的流行依赖注入 (DI) 容器。Autofac 等 DI 容器通过提供注册和解析依赖关系的方法来帮助管理应用程序不同组件之间的依赖关系。 为什么需要Autofac&#xff0c;它能实现什么&#xff1f; 控制…

交错数组知识点

基本概念 交错数组是数组的数组&#xff0c;每个维度的数量可以不同。 注意&#xff1a;二维数组的每行的列数相同&#xff0c;交错数组每行的列数可能不同。 数组的申明 //变量类型[][] 交错数组名; int[][] arr1;//变量类型[][] 交错数组名 new 变量类型[行数][]; int[][…

四十三、openlayers官网示例Freehand Drawing解析——在地图上自由绘制图形

想要在地图上绘制自由图形&#xff0c;只需要在new Draw的时候多加一个配置项就行。 function addInteraction() {const value typeSelect.value;if (value ! "None") {draw new Draw({source: source,type: typeSelect.value,freehand: true, //是否自由绘制});ma…

在当前页面拿到抽屉弹窗页面中从后端返回的值 #Vue3 #两个.vue页面之间传值问题

在当前页面拿到抽屉弹窗页面中从后端返回的值 #Vue3 #两个.vue页面之间传值问题 *解决方法一&#xff1a; 将抽屉弹窗里从后端返回得到的值缓存在浏览器中&#xff0c;在当前页面中从浏览器中获取该值。 &#xff08;原理其实就是借助第三个盒子来传递一下值&#xff0c;太小学…

HIK录像机GB28181对接相机不在线问题随笔

一、问题现象 【设备信息】型号&#xff1a;DS-8664N-I16-V3 V4.63.000 build 230412 【问题现象】HIK录像机使用GB28181对接异常相机无法正常上线&#xff0c;对接HIK相机可以正常上线。 【现场拓扑】现场拓扑如下 NVR侧使用固定公网IP地址。IPC侧使用家用宽带的方式&…