上下文:使用dplyr
和filter
,排除(Windows(指示它正在使用的文件名条目的版本,但保留该文件名的未修饰版本。
我想:
- 排除包含"/~$"的列表条目
- 和 选择以
"__MATCH__9999.xlsx"
结尾的条目,其中9999
可以是任意数量的随机整数。
输入:注意前两个条目引用同一文件
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"
部分/黑客 我不知道如何将这两个步骤减少为一个....
> 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
匹配此文字 -
$
发生在最后