r dplyr 过滤器:用于排除和匹配的正则表达式
r dplyr filter: regexp to exclude AND match
上下文: 使用 dplyr
和 filter
,排除 (Windows) 表明正在使用的文件名条目的版本,但保留该文件名的未修饰版本。
我愿意:
- 排除包含“/~$”的列表条目
- AND Select 以
"__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"
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
匹配这个文字
$
最后出现
上下文: 使用 dplyr
和 filter
,排除 (Windows) 表明正在使用的文件名条目的版本,但保留该文件名的未修饰版本。
我愿意:
- 排除包含“/~$”的列表条目
- AND Select 以
"__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"
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
匹配这个文字$
最后出现