如何用R的stringr::str_extract提取文件名中间指定部分?
解决R中提取文件名特定部分的正则问题
你的核心问题是当前正则表达式\\d+只会匹配到文件名中最早出现的连续数字(也就是BIOL10里的10),而你需要提取的是_后、.wav前的20201206_180000部分。
可以通过调整正则表达式来实现:
修改后的代码
library(plyr) library(stringr) # 确保加载stringr包 myfiles <- list.files(path=folder, pattern="*.txt", full.names = FALSE) dat_tab <- sapply(myfiles, read.table, header=TRUE, sep="\t", simplify=FALSE, USE.NAMES=TRUE) # 替换原来的正则提取行,匹配下划线后、.wav前的日期时间字符串 names(dat_tab) <- str_extract(names(dat_tab), "(?<=_)\\d{8}_\\d{6}(?=\\.wav)") binded1 <- rbindlist(dat_tab, idcol="files", fill=TRUE)
正则表达式说明
(?<=_):正向预查,确保匹配内容前面是下划线_\\d{8}_\\d{6}:匹配8位数字(日期)+下划线+6位数字(时间)的固定格式(?=\\.wav):正向预查,确保匹配内容后面是.wav
如果你的文件名格式有轻微变化(比如时间位数不同),可以用更灵活的写法,匹配下划线后到第一个.wav之前的所有非点字符:
names(dat_tab) <- str_extract(names(dat_tab), "(?<=_)[^.]+(?=\\.wav)")
这个写法会提取_和.wav之间的所有内容,不管是数字还是其他字符,适用性更广。
内容的提问来源于stack exchange,提问作者Anna
相关产品推荐
相关产品推荐

