grep 匹配文本和数字混合中的特定数字序列
grep to match a certain number sequence in a mix of text and numbers
我有几个类似"PRISM_ppt_stable_4kmM2_------_bil.bil"的文件,其中------是年和月,比如190112。文件日期范围从189501到198012。在R中,在Windows 7机器,我想匹配从192001到193912时间的所有文件。我很确定我想要grepl()
,但我想不出如何引用命令。我试过了
my.files[grepl('PRISM.*/1920/.bil$',my.files)]
和
my.files[grepl('PRISM.*[1][9][2][0].',my.files)]
和其他变体,但只会收到错误消息。我知道 [0-9]{4} 将匹配任何四个数字序列,但这将匹配所有文件。
我会这样做:
# Reproducible example of file list
library(stringr)
ym <- paste0(1895:1980, str_pad(1:12, 2, pad='0'))
file_list <- paste0("PRISM_ppt_stable_4kmM2_", ym, "_bil.bil")
# Create a list of desired dates and convert to your date format
dates <- seq(as.Date('1920-01-01'), as.Date('1939-12-01'), by='month')
dates <- format(dates, '%Y%m')
# Subset the file list
your_files <- file_list[str_extract(file_list, '[0-9]{6}') %in% dates]
我有几个类似"PRISM_ppt_stable_4kmM2_------_bil.bil"的文件,其中------是年和月,比如190112。文件日期范围从189501到198012。在R中,在Windows 7机器,我想匹配从192001到193912时间的所有文件。我很确定我想要grepl()
,但我想不出如何引用命令。我试过了
my.files[grepl('PRISM.*/1920/.bil$',my.files)]
和
my.files[grepl('PRISM.*[1][9][2][0].',my.files)]
和其他变体,但只会收到错误消息。我知道 [0-9]{4} 将匹配任何四个数字序列,但这将匹配所有文件。
我会这样做:
# Reproducible example of file list
library(stringr)
ym <- paste0(1895:1980, str_pad(1:12, 2, pad='0'))
file_list <- paste0("PRISM_ppt_stable_4kmM2_", ym, "_bil.bil")
# Create a list of desired dates and convert to your date format
dates <- seq(as.Date('1920-01-01'), as.Date('1939-12-01'), by='month')
dates <- format(dates, '%Y%m')
# Subset the file list
your_files <- file_list[str_extract(file_list, '[0-9]{6}') %in% dates]