regex - 在字符串中的任何位置以任何顺序匹配多个模式

标签 regex r

使用 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/

相关文章:

Ruby 正则表达式匹配维度

python - 从 HTML 字符串中删除所有 div 标签

r - 使用 ggplot2 从 KML 数据绘制等值线图

r - 你如何在 R 中生成多元高斯随机数?

regex - 在 perl 中使用数组元素进行模式匹配

regex - 如何根据正则表达式递归查找当前文件夹和子文件夹中的所有文件

Java 正则表达式无法识别字符串

r - 避免在 R 中的 for 循环中使用 "optimization failure"

r - 为值的子集创建游程 ID

r - 如何找到具有某些特定属性的数据集?