【问题标题】:gsub / sub to extract between certain charactersgsub / sub 在某些字符之间提取
【发布时间】:2019-03-07 22:34:07
【问题描述】:

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

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

我只想提取0000098618-13-000011

即丢弃.htmD:/temp/sample_data/

我尝试了 grep 和 gsub,但运气不佳。

【问题讨论】:

    标签: r regex


    【解决方案1】:

    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)))
    【解决方案2】:

    使用stringr

    library(stringr)
    str_extract(link , "[0-9-]+")
    
    # "0000098618-13-000011"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-24
      • 2015-09-14
      • 1970-01-01
      • 2021-12-07
      相关资源
      最近更新 更多