如何删除除R中某些特定字母以外的所有字符串?

时间:2016-11-30 10:49:46

标签: r regex gsub

经过一段时间的研究,我找不到我想要的东西。

我想做的是在字符串中保留一个确切的模式。

所以这是我的榜样:

text=c("hello, please keep THIS","THIS is important","all THIS should be done","not exactly This","not THHIS")

如何在所有字符串中准确地获得“THIS”:

res=c("THIS","THIS","THIS","","")

我在r中尝试了gsub,但我不知道如何匹配字符。

例如我试过:

gsub("(THIS).*", "\\1", text) # This delete all string after "THIS".

gsub(".*(THIS)", "\\1", text) # This delete all string before "THIS".

3 个答案:

答案 0 :(得分:1)

要将THISTHAT提取为整个单词,您可以使用以下正则表达式:

\b(THIS|THAT)\b

其中\b是单词边界,(...|...)是具有|替换运算符的捕获组(可以多次出现,可以添加更多替代选项)。

由于带有regmatches的{​​{1}}会在找不到匹配项时返回包含一些空条目的向量列表,您需要先将它们转换为NA,然后再转换为gregexpr,然后转到unlist

以下是一些base R code

""

答案 1 :(得分:0)

我们可以使用str_extract

library(stringr)
str_extract(text, "THIS")
#[1] "THIS" "THIS" "THIS" NA  

最好使用NA而不是""

答案 2 :(得分:-1)

这将首先删除与THIS不匹配的元素,然后在将中间结果存储到变量时遵循您的原始想法。看起来你想要为不匹配的元素设置空字符串,最后一行就是这样。

tmp <- text[grepl("THIS", text)]
gsub("(THIS).*", "\\1", tmp) -> tmp
gsub(".*(THIS)", "\\1", tmp) -> tmp
c(tmp, rep("", length(text) - length(tmp)))

gsub("[^THIS]","",text)似乎可以解决这个问题? “[^ THIS]”匹配除THIS之外的所有内容,并且gsub将这些匹配替换为作为第二个参数给出的空字符串。看到评论,没有按预期工作。