这就是我所拥有的
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"发布于 2018-02-26 15:46:40
我们可以使用以下任何一种方法来实现两种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"发布于 2018-02-26 15:48:52
一种纯粹的正则表达式就是使用两个前瞻性断言,它们独立地检查每个数字字符串的存在:
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)。
发布于 2018-02-26 15:53:54
我想,如果您有一组长的搜索字符串,并且不想键入所有您可以做的事情:
dat[Reduce("&", lapply(c(f,y), function(x, dat) grepl(x, dat), dat = dat))]但是,您也可以使用@TimBiegeleisen的方法键入所有内容,方法是:paste0("(?=.*", c(f,y), ")", collapse = ""),并将结果用作搜索字符串。
https://stackoverflow.com/questions/48992037
复制相似问题