我想在一些文件名中搜索四个条件。下面是我如何尝试的。
我有几个测试文件,它们的名称如下
mpi-esm1-2-hr_r1i1p1f1_w5e5_ssp126_hurs_global_daily_2041_2050.nc
mpi-esm1-2-hr_r1i1p1f1_w5e5_ssp126_hurs_global_daily_2051_2060.nc
我用这种方法来构造一个模式
modelChoice.lower <- "mpi-esm1-2-hr"
startYear = 2041
climVar <- "_hurs_"
sspChoice <- "ssp126"
pattern1 <- paste0(modelChoice.lower, ".+", climVar, ".+", sspChoice, ".+", startYear)
pattern2 <- paste0(modelChoice.lower, ".+", climVar, ".+", startYear + 10)
ff1 <- list.files(locOfFiles, pattern = pattern1, full.names = TRUE)
ff2 <- list.files(locOfFiles, pattern = pattern2, full.names = TRUE)
pattern1
> pattern1
[1] "mpi-esm1-2-hr.+_hurs_.+ssp126.+2041"
> pattern2
[1] "mpi-esm1-2-hr.+_hurs_.+2051"
> ff1
character(0)
> ff2
[1] "climdata/mpi-esm1-2-hr_r1i1p1f1_w5e5_ssp126_hurs_global_daily_2051_2060.nc"
有什么方法可以让pattern1工作吗?
2条答案
按热度按时间k2arahey1#
以下是几种让比赛发挥作用的方法:
如果您使用以下内容:
或(可能优先)
这里的问题是在sspChoice和climVar之间粘贴的正则表达式。“+”需要存在1个或多个字符。由于sspChoice和climVar的字符串直接相邻,它们之间没有字符,因此代码没有找到匹配。如果使用“*”代替“+”,则允许在该空间中存在“零个或多个”字符,而不是“一个或多个”字符。
您也可以去掉
climVar
中的下划线,但根据您的文件,这可能会导致一些您不需要的匹配。ulydmbyx2#
这两条评论都让我走上了正确的道路。谢谢!原来顺序很重要,需要“.*”。所以我使用