【问题标题】: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 以查找特定单词/短语并用高亮标记(或换行)该单词/短语的最佳方法是什么?

谢谢,

杰夫

【问题讨论】:

    标签: c# html string


    【解决方案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】:

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

            【讨论】:

              猜你喜欢
              • 2023-04-10
              • 2012-01-06
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2014-03-01
              • 1970-01-01
              • 1970-01-01
              • 2016-02-06
              相关资源
              最近更新 更多