R从字符串中删除第一个字符

ada*_*888 3 regex r

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

listfruit  <- c("aapplea","bbananab","oranggeo")
gsub('.{1}$', '', listfruit)
Run Code Online (Sandbox Code Playgroud)

但是我在尝试从字符串中删除第一个字符时遇到问题.还有第一个也是最后一个角色.我很感激你的帮助.

dik*_*esh 15

library(stringr)
str_sub(listfruit, 2, -2)
#[1] "apple"  "banana" "rangge"
Run Code Online (Sandbox Code Playgroud)

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


akr*_*run 11

如果我们需要删除第一个字符,请使用sub匹配一个字符(.表示单个字符),将其替换为''.

sub('.', '', listfruit)
#[1] "applea"  "bananab" "ranggeo"
Run Code Online (Sandbox Code Playgroud)

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

gsub('^.|.$', '', listfruit)
#[1] "apple"  "banana" "rangge"
Run Code Online (Sandbox Code Playgroud)

我们也可以将其作为一个组捕获并替换为反向引用.

sub('^.(.*).$', '\\1', listfruit)
#[1] "apple"  "banana" "rangge"
Run Code Online (Sandbox Code Playgroud)

另一种选择是 substr

substr(listfruit, 2, nchar(listfruit)-1)
#[1] "apple"  "banana" "rangge"
Run Code Online (Sandbox Code Playgroud)


Dav*_*Mas 5

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

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
Run Code Online (Sandbox Code Playgroud)

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

  • 如果有人在安装“stringr”包时遇到问题,请改用“stringi::stri_sub”。 (2认同)