【问题标题】:extracting the second last word between the special characters "/"提取特殊字符“/”之间的倒数第二个单词
【发布时间】:2019-06-24 23:52:12
【问题描述】:

我想提取“/”符号后的倒数第二个字符串。例如,

url<- c('https://example.com/names/ani/digitalcod-org','https://example.com/names/bmc/ambulancecod.org' )
df<- data.frame (url)

我想从两者之间的最后一个词中提取第二个词 // 并且想得到词 'ani' 和 'bmc'

所以,我试过了

 library(stringr)
 df$name<- word(df$url,-2)

我需要如下输出:

name 
ani
bmc 

【问题讨论】:

    标签: r regex stringr stringi


    【解决方案1】:

    使用basename的非正则表达式方法

    basename(mapply(sub, pattern = basename(url), replacement = "", x = url, fixed = TRUE))
    #[1] "ani" "bmc"
    

    basename(url)“删除所有路径直到并包括最后一个路径分隔符(如果有)”并返回

    [1] "digitalcod-org"   "ambulancecod.org"
    

    使用mapplyurl 中每个元素的结果替换为"",然后再次调用basename

    【讨论】:

      【解决方案2】:

      这是使用strsplit的解决方案

      words <- strsplit(url, '/')
      L <- lengths(words)
      vapply(seq_along(words), function (k) words[[k]][L[k]-1], character(1))    
      # [1] "ani" "bmc"
      

      【讨论】:

        【解决方案3】:

        gsub 用于

        .*?([^/]+)/[^/]+$
        


        R:
        urls <- c('https://example.com/names/ani/digitalcod-org','https://example.com/names/bmc/ambulancecod.org' )
        gsub(".*?([^/]+)/[^/]+$", "\\1", urls)
        

        这会产生

        [1] "ani" "bmc"
        

        a demo on regex101.com

        【讨论】:

          【解决方案4】:

          你可以使用word但是你需要指定分隔符,

          library(stringr)
          
          word(url, -2, sep = '/')
          #[1] "ani" "bmc"
          

          【讨论】:

          • 应该有更有效的方法。我只是继续你的思路
          【解决方案5】:

          试试这个:

          as.data.frame(sapply(str_extract_all(df$url,"\\w{2,}(?=\\/)"),"["))[3,]
          #   V1  V2
          #3 ani bmc
            as.data.frame(sapply(str_extract_all(df$url,"\\w{2,}(?=\\/)"),"["))[2:3,]
          #   V1    V2
          #2 names names
          #3   ani   bmc
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2020-07-21
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2020-06-16
            • 1970-01-01
            • 1970-01-01
            • 2019-08-18
            相关资源
            最近更新 更多