You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 21:55:44