2016-09-22 11 views
1

英数字以外の文字を含む単語を検索して返しても問題はありませんが、英数字以外の文字が返されます。たとえば、次のようにREGEXで見つかった英数字以外の文字を返す

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

戻り値:

[1] "hello?" "hi!" 

しかし、私は返すしたいことは次のとおりです。

[1] "?" "!" 

任意の考え?ありがとう!

編集:私はこれを愛しています... 2人のユーザーの反応、それを達成する4つの方法。私はたくさんのことを学んだ。ありがとうございました! ( - 1つ以上の非句読点文字を意味[^[:punct:]]+)と空白("")と交換してください

+1

からstr_extractです: 'GSUB( "[[:alnum:]]を"、 ""、はgrep(" [^ [ :grep( "[:alnum:]]"、a:)] "、または" gsub( "[:alnum:]]"、 ) '。 – lmo

+0

@ lmo、ありがとう、素晴らしいアイデア! – Phoebe

答えて

2

我々はパターンを照合することによって、英数字文字を削除するgsubを使用することができます。空白はnzcharまたはsetdiffのいずれかで削除します。

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

それとも別のオプションマイナーリビジョン@Cath stringr

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

スーパー、ありがとう! – Phoebe

関連する問題