首页 > 解决方案 > gsub / sub 在某些字符之间提取

问题描述

如何从 R 中的以下字符串中提取数字/ID?

link <- "D:/temp/sample_data/0000098618-13-000011.htm"

我只想提取0000098618-13-000011

那就是丢弃.htmD:/temp/sample_data/

我试过 grep 和 gsub 没有太多运气。

标签: rregex

解决方案


1) basename使用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) 读表。Iflink是一个向量,这仅在所有元素具有相同数量的 / 分隔组件时才有效。这也假设唯一的点是分隔扩展名的点。

DF <- read.table(text = link, sep = "/", comment = ".", as.is = TRUE)
DF[[ncol(DF)]]
## [1] "0000098618-13-000011"

推荐阅读