如何删除R中除某些特定字母外的所有字符串?
How to delete all strings except some specific letters in R?
研究了一段时间,没有找到我想要的。
我想做的是在字符串中保留一个精确的模式。
所以这是我的例子:
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","","")
我试过gsub
在r中,但我不知道如何匹配字符。
例如我试过:
gsub("(THIS).*", "\1", text) # This delete all string after "THIS".
gsub(".*(THIS)", "\1", text) # This delete all string before "THIS".
这将首先删除与 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 将这些匹配替换为作为第二个参数给出的空字符串。看到评论,没有按预期工作。
我们可以使用str_extract
library(stringr)
str_extract(text, "THIS")
#[1] "THIS" "THIS" "THIS" NA
NA 比 ""
更好
要将 THIS
或 THAT
提取为 整个单词 ,您可以使用以下正则表达式:
\b(THIS|THAT)\b
其中 \b
是一个单词边界,(...|...)
是一个带有 |
交替运算符的捕获组(可以出现多次,可以添加更多的选择)。
由于 regmatches
和 gregexpr
return 一个向量列表,每当找不到匹配项时都有一些空条目,您需要先将它们转换为 NA,然后 unlist
,然后转到""
.
这是一些 base R code:
> text=c("hello, please keep THIS","THIS is important","all THIS should be done","not exactly This","not THHIS", "THAT is something I need, too")
[1] "THIS" "THIS" "THIS" "" "" ""
> matches <- regmatches(text, gregexpr("\b(THIS|THAT)\b", text))
> res <- lapply(matches, function(x) if (length(x) == 0) NA else x)
> res[is.na(res)] <- ""
> unlist(res)
[1] "THIS" "THIS" "THIS" "" "" "THAT"
研究了一段时间,没有找到我想要的。
我想做的是在字符串中保留一个精确的模式。
所以这是我的例子:
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","","")
我试过gsub
在r中,但我不知道如何匹配字符。
例如我试过:
gsub("(THIS).*", "\1", text) # This delete all string after "THIS".
gsub(".*(THIS)", "\1", text) # This delete all string before "THIS".
这将首先删除与 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 将这些匹配替换为作为第二个参数给出的空字符串。看到评论,没有按预期工作。
我们可以使用str_extract
library(stringr)
str_extract(text, "THIS")
#[1] "THIS" "THIS" "THIS" NA
NA 比 ""
要将 THIS
或 THAT
提取为 整个单词 ,您可以使用以下正则表达式:
\b(THIS|THAT)\b
其中 \b
是一个单词边界,(...|...)
是一个带有 |
交替运算符的捕获组(可以出现多次,可以添加更多的选择)。
由于 regmatches
和 gregexpr
return 一个向量列表,每当找不到匹配项时都有一些空条目,您需要先将它们转换为 NA,然后 unlist
,然后转到""
.
这是一些 base R code:
> text=c("hello, please keep THIS","THIS is important","all THIS should be done","not exactly This","not THHIS", "THAT is something I need, too")
[1] "THIS" "THIS" "THIS" "" "" ""
> matches <- regmatches(text, gregexpr("\b(THIS|THAT)\b", text))
> res <- lapply(matches, function(x) if (length(x) == 0) NA else x)
> res[is.na(res)] <- ""
> unlist(res)
[1] "THIS" "THIS" "THIS" "" "" "THAT"