2016-08-16 42 views
0

要清除從網頁上刮掉的文本,我運行了gsub()來替換那些冗餘符號。在這個過程中,我使用擴展正則表達式(如[:blank:], [:digit:], [:print:]等)。但是它們取代了目標文本中的字母,而且它們在實際中應該是不可行的。擴展正則表達式只用於「模式」,而不是「替換」?

pg<-"http://www.irgrid.ac.cn/handle/1471x/1066693?mode=full&submit_simple=Show+full+item+record" 
library(XML) 
MetaNode <- getNodeSet(htmlParse(pg), '//table[@class="itemDisplayTable"]') 
meta_label <- xpathSApply(MetaNode[[1]], './/td[@class="metadataFieldLabel"]', xmlValue) 
meta_label <- gsub("[[:blank:]]+", "[:blank:]", meta_label) 
meta_label <- gsub("[[:punct:]]+", "", meta_label) 
meta_label 

[1] 「Titleblank」[2] 「Authorblank」
[3] 「IssuedblankDateblank」[4] 「Sourceblank」
[5] 「IndexedblankTypeblank」[6] 「ContentblankTypeblank」 [7] 「URI標識空白」
[8] 「OpenblankAccessblank \ r \ nTypeblank」[9] 「fulltextblankversionblank \ r \ nblanktypeblank」[10] 「專題空白」

  1. 那些擴展正則表達式是否僅在函數的「模式」 參數中使用,但不能在「替換」中使用?
  2. 像「\ r」,「\ n」這樣的特殊符號有它們的擴展常規 表達式?

回答

1

您不能使用[::blank::]作爲替代品,因爲它代表了一整類不同類型的符號。如果你想減少多重複的字符來第一次出現,你可以使用像

x<-"Hello World" 
gsub("([[:blank:]])+", "\\1", x) 
# [1] "Hello World" 

這裏我們使用正則表達式捕獲組搶在正則表達式中發現的價值。

+0

我試過擴展正則表達式的不同形式,發現使用不同的括號可能會有不同的效果,例如()或[],一個或兩個([[]])。有沒有關於這方面的文件? –