2010-11-05 30 views
0

我有一个字符串,基本上是一个正常格式的内容块(p标签,粗体等..),有时包含HTML链接编辑已投入。去除HTML字符串中的所有链接 - 正则表达式?

但我想保留所有其他的HTML,但只是删除链接。但是不知道这样做,为的字符串可能很大(因为它们是文章)

任何代码示例不胜感激:)

+0

你想出来的超链接的HTML?意味着带有p,粗体,斜体标签格式的纯文本,对不对? – 2010-11-05 07:13:54

+0

示例数据有帮助。 – 2010-11-05 07:16:42

+0

你想做这个服务器端(如在使用PHP等)或客户端(只需使用Javascript更改显示的HTML)? – 2010-11-05 07:43:02

回答

2

不是很准确的最快和最有效的方式,但 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; 

但是请注意,这消除了链接标签可以改变造型,例如,如果存在形式a.someClass { ... }的CSS样式或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(); 
} 

,但我不知道这是否可能导致与一些嵌套结构突变/迭代问题...

相关问题