【发布时间】:2020-11-02 17:15:02
【问题描述】:
假设我有这个玩具矢量
vec <- c("FOO blabla", "fail bla", "blabla FEEbla", "textFOO", "textttt")
to_match <- c("FOO", "FEE")
我想获得一个与vec 相同长度的向量,其中仅存储来自to_match 的模式(如果存在),否则留下NA。因此,我想要的结果是
c("FOO", NA, "FEE", "FOO", NA)
我的第一个想法是用空格 ("") 替换所有 不 匹配 to_match 中任何模式的内容。我尝试了以下代码,它完全相反,即它用空格替换了 所做 匹配to_match 中的任何模式的所有内容。
sub(paste(to_match, collapse = "|"), "", vec)
# [1] " blabla" "fail bla" "blabla bla" "text" "textttt"
但是,我尝试在分组结构之前使用插入符号 (^) 来反转这种行为,但收效甚微。
# fail
sub(paste0("^(", paste(to_match, collapse = "|"), ")"), "", vec)
# [1] " blabla" "fail bla" "blabla FEEbla" "textFOO" "textttt"
我怎样才能达到所需的输出?
【问题讨论】: