使用R和关键字比较在目录中找到正确的文件

时间:2019-09-08 19:10:02

标签: r regex find-occurrences

我对r很陌生,我没有使用正则表达式的经验,我们将不胜感激。

我正在读dir,并且试图查找数字为“ 22953”的文件,然后我想读取包含该文件的最新文件。日期也写在文件名中。

目录中的文件:

inv_22953_20190828023258_112140.csv
inv_22953_20190721171018_464152.csv
inv_8979_20190828024558_112140.csv

我在这里遇到的问题是,我不能真正依靠字符串的位置来获取日期,因为如您所见,某些文件的字符可能更少,这就是为什么一种解决方案是找到日期的原因在第二和第三之间。

filepath <- "T:/Pricing/Workstreams/Business Management/EU/01_Operations/02_Carveouts/05_ImplementationTest/"

list.files(filepath)[which.max(suppressWarnings(ymd_hm(substr(list.files(filepath, pattern="_22953"),11,22))))]```

1 个答案:

答案 0 :(得分:0)

library(lubridate)

# First find the files with 22953 inside
myFiles <- grep("22953", list.files(filepath), value = T)

# Then, isolate the date and which file has the newest (maximum) date:

regex <- "^.*_.*_([0-9]{4})([0-9]{2})([0-9]{2}).*\\.csv$"

myFiles[which(as_date(sub(regex, "\\1-\\2-\\3", myFiles)) == max(as_date(sub(regex, "\\1-\\2-\\3", myFiles))))]

正则表达式的解释

  • ^匹配字符串的开头(例如,“接下来出现的就是开头”)
  • 。*匹配0次以上的任何内容
  • _匹配下划线
  • [0-9] {4}找到0到9之间的4个数字
  • [0-9] {2}找到0到9之间的2个数字
  • 捕获括号中的替换字符串
  • \\ 1指代括号中的第一组,\\ 2指代第二组,\\ 3指代第三组
  • $指的是字符串的结尾(例如“字符串的结尾以.csv结尾”)