2016-09-22 41 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