2016-09-22 84 views
1

我沒有發現並返回包含非字母數字字符的單詞的問題,但我想要做的是返回找到的非字母數字字符。例如:返回REGEX發現的非字母數字字符

a <- c("hello?", "goodbye","hi!") 
grep("[^[:alnum:]]", a, value=TRUE) 

返回:

[1] "hello?" "hi!" 

但我想退是:

[1] "?" "!" 

有什麼想法?謝謝!

編輯:我喜歡這...兩個用戶的反應,四種不同的方式來完成它。我學到了很多。謝謝!

+1

@Cath次版本str_extract:'GSUB( 「[[:alnum:]]」, 「」,grep的(「[^ [ :alnum:]]「a,value = TRUE))'或'gsub(」[[:alnum:]]「,」「,a [grepl(」[^ [:alnum:]]「,a)] )'。 – lmo

+0

@lmo,謝謝你,好主意! – Phoebe

回答

2

我們可以使用gsub通過匹配圖案以除去字母數字字符([^[:punct:]]+ - 這意味着一個或多個非標點字符),並與坯料("")替換它。我們用nzcharsetdiff刪除空格。

setdiff(gsub("[^[:punct:]]+", "", a), "") 
#[1] "?" "!" 

或者另一種選擇是從stringr

library(stringr) 
as.vector(na.omit(str_extract(a, "[[:punct:]]+"))) 
#[1] "?" "!" 
+1

超級,謝謝! – Phoebe