如何在R语言中从文件名提取数字(适配单/多位数)
R语言提取文件名中的数字向量
先还原你的文件名列表:
file_names <- c("EXACT_46401#1.stats.json", "EXACT_46401#11.stats.json", "EXACT_46401#12.stats.json", "EXACT_46401#13.stats.json", "EXACT_46401#14.stats.json", "EXACT_46401#15.stats.json", "EXACT_46401#16.stats.json", "EXACT_46401#7.stats.json", "EXACT_46401#18.stats.json", "EXACT_46401#19.stats.json")
方法1:基础R正则匹配
用sub函数精准定位#之后、.之前的数字序列,提取后转为数值型向量:
num_vec <- as.numeric(sub("^.*#(\\d+)\\..*$", "\\1", file_names)) num_vec # 输出:[1] 1 11 12 13 14 15 16 7 18 19
正则规则说明:
^.*#:匹配从文件名开头到#的所有字符(\\d+):捕获一个或多个连续数字(括号用于标记需要提取的目标内容)\\..*$:匹配从.到文件名结尾的所有字符\\1:引用捕获到的第一个分组(也就是我们需要的数字部分)
方法2:用stringr包简化操作
如果习惯使用tidyverse工具链,stringr::str_extract可以更直观地提取目标数字:
library(stringr) num_vec <- as.numeric(str_extract(file_names, "(?<=#)\\d+")) num_vec # 输出:[1] 1 11 12 13 14 15 16 7 18 19
正则规则说明:
(?<=#):正向断言,确保目标数字的前一个字符是#(但不会把#包含到提取结果里)\\d+:匹配一个或多个连续数字
内容的提问来源于stack exchange,提问作者Ishan Mehta
相关产品推荐
相关产品推荐

