【发布时间】:2019-03-07 22:34:07
【问题描述】:
如何从 R 中的以下字符串中提取数字/ID?
link <- "D:/temp/sample_data/0000098618-13-000011.htm"
我只想提取0000098618-13-000011
即丢弃.htm 和D:/temp/sample_data/。
我尝试了 grep 和 gsub,但运气不佳。
【问题讨论】:
如何从 R 中的以下字符串中提取数字/ID?
link <- "D:/temp/sample_data/0000098618-13-000011.htm"
我只想提取0000098618-13-000011
即丢弃.htm 和D:/temp/sample_data/。
我尝试了 grep 和 gsub,但运气不佳。
【问题讨论】:
1) 基本名称使用basename,后跟sub:
sub("\\..*", "", basename(link))
## [1] "0000098618-13-000011"
2) file_path_sans_ext
library(tools)
file_path_sans_ext(link)
## [1] "0000098618-13-000011"
3) 子
sub(".*/(.*)\\..*", "\\1", link)
## [1] "0000098618-13-000011"
4) gsub
gsub(".*/|\\.[^.]*$", "", link)
## [1] "0000098618-13-000011"
5) strsplit
sapply(strsplit(link, "[/.]"), function(x) tail(x, 2)[1])
## [1] "0000098618-13-000011"
6) read.table。如果link 是一个向量,这仅在所有元素具有相同数量的 / 分隔组件时才有效。这也假设唯一的点是分隔扩展名的点。
DF <- read.table(text = link, sep = "/", comment = ".", as.is = TRUE)
DF[[ncol(DF)]]
## [1] "0000098618-13-000011"
【讨论】:
basename 函数有什么作用?
tools::file_path_sans_ext(basename("foo/bar/quux.html"))。
basename 对我来说是新的。
?basename。
basename - dirname 组合:dirname(chartr(".", "/", basename(link)))
使用stringr:
library(stringr)
str_extract(link , "[0-9-]+")
# "0000098618-13-000011"
【讨论】: