2012-04-19 34 views
0

我有一個包含HTML標籤,例如從矢量

abc<-""welcome <span class=\"r\"><a href=\"abc\">abc</a></span> Have fun!"" 

我想刪除這些標籤,並得到follwing矢量

 abc<-"welcome Have fun" 

回答

1

嘗試串矢量消除了與標籤數據

> gsub("(<[^>]*>)","",abc) 

什麼這就是'代替<的每個實例,其次是任何不>沒有任何東西>

你不能只做gsub("<.*>","",abc),因爲正則表達式是貪婪的,並且。*會匹配到最後>在你的文字(在你的例子中你會失去'abc')。

如果您的代碼中有>><foo class=">" >合法,此解決方案可能會失敗?毫無疑問,有人會想出另一個涉及用重量級XML包解析HTML的答案。

+0

謝謝Spacedman如果載體含有像一個超鏈接的<-c(「你好http://abc.com」),我們怎樣才能刪除它 – jan5 2012-04-19 10:18:46

+0

你必須要堅持的問題,因爲這個例子評論傾向於重新格式化文本並將事情弄糟...... – Spacedman 2012-04-19 11:27:37

1

您可以將您的HTML片段轉換爲包含 htmlParsehtmlTreeParse的XML文檔。 然後,您可以將其轉換爲文本 即剝離所有標籤,並使用xmlValue

abc <- "welcome <span class=\"r\"><a href=\"abc\">abc</a></span> Have fun!" 
library(XML) 
#doc <- htmlParse(abc, asText=TRUE) 
doc <- htmlTreeParse(abc, asText=TRUE) 
xmlValue(xmlRoot(doc)) 

如果您也想刪除的鏈接, 可以使用xmlDOMApply轉換XML樹的內容。

f <- function(x) if(xmlName(x) == "span") xmlTextNode(" ") else x 
d <- xmlDOMApply(xmlRoot(doc), f) 
xmlValue(d)