这就是我所拥有的:
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?
期望的结果是:
"data_5.20_168.9850.txt"
答案 0 :(得分:2)
一种纯正则表达式的方法是使用两个前瞻断言,它们独立地检查每个数字字符串是否存在:
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)
。
答案 1 :(得分:2)
我想如果你有一长串搜索字符串,而且你不想输入你能做的所有事情:
dat[Reduce("&", lapply(c(f,y), function(x, dat) grepl(x, dat), dat = dat))]
然而,您可能也可以使用@ TimBiegeleisen的方法通过执行以下操作来解决所有问题:paste0("(?=.*", c(f,y), ")", collapse = "")
并将结果用作搜索字符串。
答案 2 :(得分:1)
我们可以使用以下任何一种方法做两个grep:
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"