首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何对grepl使用"and“?

如何对grepl使用"and“?
EN

Stack Overflow用户
提问于 2018-02-26 15:42:03
回答 3查看 318关注 0票数 0

这就是我所拥有的

代码语言:javascript
复制
f=5.20
y=168.9850
dat=c("dat.txt","dat_5.20.txt","data_5.20_168.9850.txt")
Filter(function(x) grepl(f, x), dat)
# [1] "dat_5.20.txt"           "data_5.20_168.9850.txt"

我需要的只是一个得到的f and y

如何在grepl中同时使用f和y?

预期的结果将是:

代码语言:javascript
复制
"data_5.20_168.9850.txt"
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-02-26 15:46:40

我们可以使用以下任何一种方法来实现两种grep:

代码语言:javascript
复制
grep(y, grep(f, dat, value = TRUE), value = TRUE)
## [1] "data_5.20_168.9850.txt"

dat[grepl(f, dat) & grepl(y, dat)]
## [1] "data_5.20_168.9850.txt"

dat[ intersect(grep(f, dat), grep(y, dat)) ]
## [1] "data_5.20_168.9850.txt"
票数 1
EN

Stack Overflow用户

发布于 2018-02-26 15:48:52

一种纯粹的正则表达式就是使用两个前瞻性断言,它们独立地检查每个数字字符串的存在:

代码语言:javascript
复制
f <- "5\\.20"
y <- "168\\.9850"
dat <- c("dat.txt","dat_5.20.txt","data_5.20_168.9850.txt")

grepl(paste0("(?=.*", f, ")(?=.*", y, ")"), dat, perl=TRUE)

[1] FALSE FALSE  TRUE

这里使用的模式是(?=.*5\.20)(?=.*168\.9850)

票数 2
EN

Stack Overflow用户

发布于 2018-02-26 15:53:54

我想,如果您有一组长的搜索字符串,并且不想键入所有您可以做的事情:

代码语言:javascript
复制
dat[Reduce("&", lapply(c(f,y), function(x, dat) grepl(x, dat), dat = dat))]

但是,您也可以使用@TimBiegeleisen的方法键入所有内容,方法是:paste0("(?=.*", c(f,y), ")", collapse = ""),并将结果用作搜索字符串。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48992037

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档