使用 grep 在字符串中的任何位置以任何顺序匹配多个模式的最短方法是什么?最好在一条短线中使用基数 R。
下面是一个例子:
我想找到所有包含 的元素全部 这两个元素在我的 matches
中矢量,在 任何订单 , 在 任何地点 一起在 my_vector
的元素中, 元素中它们之间的任何字符。
matches <- c("fe", "ve")
# 1 2 3 4 5 6 7 8 9
my_vector <- c("fv", "v", "f", "f_v_e", "fe_ve", "feve", "vefe", "fve" , "a")
# want 5, 6, 7
我可以做这个:
grep(paste0("(?=.*", paste0(matches, sep = ""), ")", collapse = ""),
my_vector,
perl = TRUE)
[1] 5 6 7
但是有没有更简洁的方法呢?在我的示例中,我有两个元素要匹配,但我的实际问题有几个。
最佳答案
避免 regex/paste
的选项将是
which(grepl(matches[1], my_vector) & grepl(matches[2],my_vector))
#[1] 5 6 7
为了让它更有活力
which(Reduce(`&`, lapply(matches, grepl, my_vector)))
#[1] 5 6 7
或者正如@Jota 提到的
grep
可以用intersect
Reduce(intersect, lapply(matches, grep, my_vector))
如果
matches
中有很多元素, paste
方法可能行不通...
关于regex - 在字符串中的任何位置以任何顺序匹配多个模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38342702/