我想做的是在字符串中保留一个确切的模式。
所以这是我的榜样:
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".
答案 0 :(得分:1)
要将THIS
或THAT
提取为整个单词,您可以使用以下正则表达式:
\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将这些匹配替换为作为第二个参数给出的空字符串。看到评论,没有按预期工作。