【问题标题】:R remove first character from stringR从字符串中删除第一个字符
【发布时间】:2016-01-31 11:55:53
【问题描述】:

我可以从字符串中删除最后一个字符:

listfruit  <- c("aapplea","bbananab","oranggeo")
gsub('.{1}$', '', listfruit)

但我在尝试从字符串中删除第一个字符时遇到问题。 还有第一个和最后一个字符。 非常感谢您的帮助。

【问题讨论】:

    标签: regex r


    【解决方案1】:

    如果我们需要去掉第一个字符,使用sub,匹配一个字符(.代表单个字符),替换成''

    sub('.', '', listfruit)
    #[1] "applea"  "bananab" "ranggeo"
    

    或者对于第一个和最后一个字符,匹配字符串开头(^.)或字符串结尾(.$)的字符,并替换为''

    gsub('^.|.$', '', listfruit)
    #[1] "apple"  "banana" "rangge"
    

    我们还可以将其捕获为一个组并替换为反向引用。

    sub('^.(.*).$', '\\1', listfruit)
    #[1] "apple"  "banana" "rangge"
    

    另一个选项是substr

    substr(listfruit, 2, nchar(listfruit)-1)
    #[1] "apple"  "banana" "rangge"
    

    【讨论】:

      【解决方案2】:
      library(stringr)
      str_sub(listfruit, 2, -2)
      #[1] "apple"  "banana" "rangge"
      

      删除第一个和最后一个字符。

      【讨论】:

        【解决方案3】:

        对我来说,性能很重要,所以我使用可用的解决方案运行了一个快速基准测试。

        library(magrittr)
        comb_letters = combn(letters,5) %>% apply(2, paste0,collapse = "")
        
        bench::mark(
          gsub = {gsub(pattern = '^.|.$',replacement = '',x = comb_letters)},
          substr = {substr(comb_letters,start = 2,stop = nchar(comb_letters) - 1)},
          str_sub = {stringr::str_sub(comb_letters,start =  2,end = -2)}
        )
        #> # A tibble: 3 x 6
        #>   expression      min   median `itr/sec` mem_alloc `gc/sec`
        #>   <bch:expr> <bch:tm> <bch:tm>     <dbl> <bch:byt>    <dbl>
        #> 1 gsub         32.9ms   33.7ms      29.7  513.95KB     0   
        #> 2 substr      15.07ms  15.84ms      62.7    1.51MB     2.09
        #> 3 str_sub      5.08ms   5.36ms     177.   529.34KB     2.06
        

        reprex package (v0.3.0) 于 2019 年 12 月 30 日创建

        【讨论】:

        • 如果有人在安装stringr 包时遇到问题,请改用stringi::stri_sub
        猜你喜欢
        • 1970-01-01
        • 2012-09-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-24
        • 2011-05-16
        相关资源
        最近更新 更多