代码之家  ›  专栏  ›  技术社区  ›  YodasMyDad

从HTML字符串中删除所有链接-Regex?

  •  0
  • YodasMyDad  · 技术社区  · 14 年前

    我有一个字符串,它基本上是一个具有正常格式的内容块(p标记、粗体等),有时还包含编辑器放入的HTML链接。

    但是我想保留所有其他的HTML,但是去掉链接。但不确定最快、最有效的方法,因为字符串可能很大(因为它们是文章)

    非常感谢任何代码示例:)

    1 回复  |  直到 14 年前
        1
  •  2
  •   Marc Gravell    14 年前

    不是很准确,但是 懒惰的 apprach将替换 "<a " 具有 "<span " "</a>" 具有 "</span>" . 更多 精确的 结果是在DOM中解析它:

    string html;
    using (var client = new WebClient()) {
        html = client.DownloadString("http://stackoverflow.com");
    }
    var doc = new HtmlAgilityPack.HtmlDocument();
    doc.LoadHtml(html);
    HtmlNode node;
    // loop this way to avoid issues with nesting, mutating the set, etc
    while((node = doc.DocumentNode.SelectSingleNode("//a")) != null) {
        var span = doc.CreateElement("span");
        span.InnerHtml = node.InnerHtml;
        node.ParentNode.InsertAfter(span, node);
        node.Remove();
    }
    string final = doc.DocumentNode.OuterHtml;
    

    但是,请注意,删除链接标记 可能会改变造型 ,例如,如果有窗体的css样式 a.someClass { ... } a someNested {...}

    注意上面的代码;您还可以 尝试 越直接:

    foreach(var node in doc.DocumentNode.SelectNodes("//a")) {
        var span = doc.CreateElement("span");
        span.InnerHtml = node.InnerHtml;
        node.ParentNode.InsertAfter(span, node);
        node.Remove();
    }
    

    但我不确定这是否会导致一些嵌套结构的变异/迭代问题。。。