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

问题描述 投票:3回答:3

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

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

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

regex r
3个回答
14
投票

如果需要删除第一个字符,请使用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"

5
投票
library(stringr)
str_sub(listfruit, 2, -2)
#[1] "apple"  "banana" "rangge"

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


0
投票

对我来说,性能很重要,因此我对可用的解决方案进行了快速基准测试。

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创建

© www.soinside.com 2019 - 2024. All rights reserved.