使用多个模式时找出匹配的模式

时间:2019-06-09 20:48:03

标签: r

我正在寻找文件名列表中匹配的模式。我可以找出是否找到了匹配项,但找不到匹配的模式。

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。

2 个答案:

答案 0 :(得分:1)

我们可以使用str_detect中的stringr,该向量是在stringpattern上向量化的:

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"