我正在寻找文件名列表中匹配的模式。我可以找出是否找到了匹配项,但找不到匹配的模式。
implicit class EitherIdOps[A](private val obj: A) extends AnyVal {
/** Wrap a value in `Left`. */
def asLeft[B]: Either[A, B] = Left(obj)
/** Wrap a value in `Right`. */
def asRight[B]: Either[B, A] = Right(obj)
}
我想看到的是匹配的模式,而不是找到匹配项的TRUE。
答案 0 :(得分:1)
我们可以使用str_detect
中的stringr
,该向量是在string
和pattern
上向量化的:
library(stringr)
str_detect("./csv files/DHFR 2019-04-09 04.59 PM_001.csv",
glob2rx(local_pattern[, 2]))
# [1] FALSE FALSE FALSE TRUE FALSE FALSE FALSE
这样
local_pattern[str_detect("./csv files/DHFR 2019-04-09 04.59 PM_001.csv", glob2rx(local_pattern[,2])), 2]
# [1] *DHFR*.csv
答案 1 :(得分:0)
如果要匹配的模式少于10个,则可以在基数R中使用PERL
个样式捕获来收集信息。首先使用(...)
构建一个样式来进行捕获。
pat <- paste(glob2rx(local_pattern$filename), collapse = ")|(")
pat <- paste0("(", pat, ")")
现在将文本字符串分配给变量:
x <- "./csv files/DHFR 2019-04-09 04.59 PM_001.csv"
使用regexpr
或更费力地gregexpr
进行多次比赛:
m <- regexpr(pat, x, perl = TRUE)
sel <- which(attr(m, "capture.length") > 0)
收集所需信息:
local_pattern[sel,]
> condition filename
> 4 dmhfr *DHFR*.csv
regmatches(x, m)
> [1] "./csv files/DHFR 2019-04-09 04.59 PM_001.csv"