r dplyr 过滤器:用于排除和匹配的正则表达式

r dplyr filter: regexp to exclude AND match

上下文: 使用 dplyrfilter,排除 (Windows) 表明正在使用的文件名条目的版本,但保留该文件名的未修饰版本。

我愿意:

输入: 注意前两个条目指的是同一个文件

 fl=tibble(fn=c("C:/a/b/c/~$a__01__IQ9__FQ__MATCH__4567.xlsx",
      "C:/a/b/c/a__01__IQ9__FQ__MATCH__4567.xlsx",
      "C:/a/b/c/a__01__IQ2__FQ__NOTMATCH__8910.xlsx"))
fl %>%
  filter(grepl("regexp",fn))

想要的结果:

"C:/a/b/c/a__01__IQ9__FQ__MATCH__4567.xlsx"

Partial/Hack 我不知道如何将这两个步骤合并为一个....

> fl %>% 
  filter( grepl("(__MATCH__[\d]+\.xlsx$)",fn,perl=TRUE) ) %>%
  filter( !grepl("\$",fn,perl=TRUE) )

# A tibble: 1 x 1
                                         fn
                                      <chr>
1 C:/a/b/c/a__01__IQ9__FQ__MATCH__4567.xlsx

启用 perl 作为默认引擎,您可以使用前瞻:

fl %>% 
  filter(grepl("^(?!.*/~\$).*__MATCH__\d+\.xlsx$",fn, ignore.case = FALSE, perl = TRUE))
# A tibble: 1 x 1
                                         fn
                                      <chr>
1 C:/a/b/c/a__01__IQ9__FQ__MATCH__4567.xlsx

细分:

  • ^ 断言输入字符串的开头
  • (?!.*/~\$) 不应包含 /~$
  • .*__MATCH__\d+\.xlsx 匹配这个文字
  • $最后出现