2010-11-05 24 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(); 
} 

,但我不知道這是否可能導致與一些嵌套結構突變/迭代問題...

相關問題