我的例子如下:
toMatch <- c("[1]", "[2]", "[3]")
names <- c("apple[1]", "apple", "apple[3]")
我希望提取names
中包含toMatch
中某个模式的字词。
这就是我试过的
grep(toMatch, names, value=T)
但是,它对我不起作用。有什么建议吗?
答案 0 :(得分:1)
问题是[
中使用的toMatch
字符是regex/pattern
中具有特殊含义的保留字符。因此,我们需要先将[
字符替换为\\[
。
现在,使用toMatch
折叠|
,然后在pattern
函数中将其grepl
用于搜索names
中的匹配字符。
解决方案的结果如下:
#Just for indexes
grepl(paste0(gsub("(\\[)","\\\\[",toMatch), collapse = "|"), names)
#[1] TRUE FALSE TRUE
#For values
grep(paste0(gsub("(\\[)","\\\\[",toMatch), collapse = "|"), names, value = TRUE)
#[1] "apple[1]" "apple[3]"
数据:强>
toMatch <- c("[1]", "[2]", "[3]")
names <- c("apple[1]", "apple", "apple[3]")
答案 1 :(得分:1)
我们还可以删除字母部分并使用%in%
names[sub("^[^[]*", "", names) %in% toMatch]
#[1] "apple[1]" "apple[3]"