r dplyr filter:正则表达式排除AND匹配
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了r dplyr filter:正则表达式排除AND匹配相关的知识,希望对你有一定的参考价值。
上下文:使用dplyr
和filter
,排除(Windows)文件名条目的版本,表明它正在使用中,但保留该文件名的未修饰版本。
我想:
- 排除包含“/〜$”的列表条目
- AND选择以
"__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
匹配这个字面$
最后发生
以上是关于r dplyr filter:正则表达式排除AND匹配的主要内容,如果未能解决你的问题,请参考以下文章