首页 > 解决方案 > 如何定义我想要的正则表达式?

问题描述

我正在尝试遍历文件。一些具有特定名称的文件应该在函数中使用。看起来像:

func <- function(number){
  fileList <- list.files(pattern=c("^Start_", number, "_end.csv"))
}

我只想使用文件名中编号完全正确的文件。当我10现在使用 as 参数运行该函数时,它还会使用文件名1001000文件名中的文件。

这是我已经尝试过的:

pattern=c("^Start_", number, "_end.csv")
pattern=c("^Start_", number, "^_end.csv")
pattern=c("^Start_", "^", number, "$", "_end.csv")

当我使用as 参数运行函数时,所有这些模式也使用文件名中带有100和的文件。100010

我怎样才能防止这种情况?

标签: rregex

解决方案


pattern参数 to应该采用list.files单个正则表达式string,而不是字符串向量。试试这个版本:

func <- function(number) {
    fileList <- list.files(pattern=paste0("^Start_", number, "_end\\.csv$"))
}

但是鉴于您使用的正则表达式模式是固定的,因此使用正则表达式没有多大意义。但是,如果您想一次性匹配一系列 ID,例如 20、30 和 40,那么正则表达式会变得更有用:

ids <- c(20, 30, 40)
regex <- paste(ids, collapse="|")
fileList <- list.files(pattern=paste0("^Start_(", regex, ")_end\\.csv$"))

推荐阅读