在 C# 字符串中的 HTML 中搜索特定文本并标记文本的最佳方法是啥?

Posted

技术标签:

【中文标题】在 C# 字符串中的 HTML 中搜索特定文本并标记文本的最佳方法是啥?【英文标题】:What is the best way to search through HTML in a C# string for specific text and mark the text?在 C# 字符串中的 HTML 中搜索特定文本并标记文本的最佳方法是什么? 【发布时间】:2010-10-02 04:09:59 【问题描述】:

在 C# 字符串变量中搜索 html 以查找特定单词/短语并用高亮标记(或换行)该单词/短语的最佳方法是什么?

谢谢,

杰夫

【问题讨论】:

【参考方案1】:

我喜欢用Html Agility Pack,非常好用,虽然最近更新不多,但还是可以用的。例如抓取所有链接

HtmlWeb client = new HtmlWeb();
HtmlDocument doc = client.Load("http://yoururl.com");            
HtmlNodeCollection Nodes = doc.DocumentNode.SelectNodes("//a[@href]");         

foreach (var link in Nodes)
                
    Console.WriteLine(link.Attributes["href"].Value);

【讨论】:

【参考方案2】:

正则表达式将是我的方式。 ;)

【讨论】:

【参考方案3】:

如果您使用的 HTML 与 XHTML 兼容,您可以将其加载为 XML 文档,然后使用 XPath/XSL - 冗长但有点优雅?

我过去使用的一种方法是使用HTMLTidy将杂乱的HTML转换为XHTML,然后使用XSL/XPath将屏幕内容抓取到数据库中,创建反向内容管理系统。

正则表达式可以做到这一点,但一旦您尝试去除标签、图像名称等以消除误报,可能会很复杂。

【讨论】:

【参考方案4】:

在简单的情况下,正则表达式就可以了。

字符串输入 = "ttttttgottttttt"; 字符串输出 = Regex.Replace(input, "go", "$0");

将产生:“ttttttgotttttt”

但是当你说 HTML 时,如果你指的是最终呈现的文本,那就有点混乱了。假设你有这个 HTML:

Bok

要突出显示“Book”这个词,您需要适当的 HTML 渲染器的帮助。为简化起见,可以先把所有标签去掉,只留下内容,然后照常进行替换,但感觉不对。

【讨论】:

【参考方案5】:

您可以使用 Html DOM,这是 SourceForge.net 上的一个开源项目。 通过这种方式,您可以以编程方式操作您的文本,而不是依赖正则表达式。

【讨论】:

它处于 alpha 状态,最后一次更新是在 2005 年,这意味着不再维护。【参考方案6】:

搜索字符串时,您需要查找正则表达式。至于标记它,一旦你有了子字符串的位置,它应该很简单,可以使用它来添加一些东西来包裹短语。

【讨论】:

以上是关于在 C# 字符串中的 HTML 中搜索特定文本并标记文本的最佳方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

如何在当前文件夹和所有子文件夹中的所有文件中搜索特定文件内容[重复]

如何在 JSON Postgres 数据类型列中搜索特定字符串?

我可以使用IFS公式在单元格中搜索特定文本,然后将文本返回到当前单元格吗?

在 XML 树中搜索特定文本并在下一个节点中提取文本

如何在 DataTable 中搜索特定记录?

在表格视图控制器iOS swift中搜索特定记录