用方括号提取表达式

时间:2018-04-21 22:49:48

标签: r stringr

我的例子如下:

toMatch <- c("[1]", "[2]", "[3]")

names <- c("apple[1]", "apple", "apple[3]")

我希望提取names中包含toMatch中某个模式的字词。

这就是我试过的

grep(toMatch, names, value=T)

但是,它对我不起作用。有什么建议吗?

2 个答案:

答案 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]"