加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

正则表达式 – 在字符串中的任何位置以任何顺序匹配多个模式

发布时间:2020-12-14 05:59:23 所属栏目:百科 来源:网络整理
导读:在字符串的任何位置使用grep以任何顺序匹配多个模式的最短方法是什么?优选在一条短线中使用碱R. 这是一个例子: 我想在my_vector的元素中找到包含所有这两个元素的所有元素,在任何顺序中,在任何位置,在元素中它们之间的任何字符. matches - c("fe","ve")# 1
在字符串的任何位置使用grep以任何顺序匹配多个模式的最短方法是什么?优选在一条短线中使用碱R.

这是一个例子:

我想在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

但是有更简洁的方法吗?在我的例子中,我有两个要匹配的元素,但我的实际问题有几个.

解决方法

避免正则表达式/粘贴的选项是

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可以用于交叉

Reduce(intersect,grep,my_vector))

如果匹配中有许多元素,则粘贴方法可能无效…

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读