r dplyr filter:正则表达式排除AND匹配

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了r dplyr filter:正则表达式排除AND匹配相关的知识,希望对你有一定的参考价值。

上下文:使用dplyrfilter,排除(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匹配的主要内容,如果未能解决你的问题,请参考以下文章

Python 操作Redis

python爬虫入门----- 阿里巴巴供应商爬虫

Python词典设置默认值小技巧

《python学习手册(第4版)》pdf

Django settings.py 的media路径设置

Python中的赋值,浅拷贝和深拷贝的区别