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

时间:2016-01-31 11:55:53

标签: regex r

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

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

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

3 个答案:

答案 0 :(得分:9)

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

答案 1 :(得分:4)

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

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

答案 2 :(得分: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创建