首页 > 解决方案 > Stringr - 从连字符的两侧删除前导零

问题描述

根据标题,我正在寻找一种从连字符两侧删除前导零的方法。

codes <- c("0002-01014", "0020-0014","00014-00010")
want <- c("2-1014","20-14","14-10")

我想可以将数字一分为二,删除前导零,然后粘贴在一起,但我想知道是否有更精细的方法使用单步str_extract(),str_replace()或类似方法。

编辑:

我目前正在使用

str_split("0002-01010","-",simplify=T) %>%
  str_replace("^0+(?!$)", "") %>%
  str_c(collapse="-")

并且很好奇是否有可以在单行中实现的替代方法。

标签: rregexstringr

解决方案


您可以使用

codes <- c("0002-01014", "0020-0014","00014-00010", "00000-122345")
gsub("\\b0+\\B", "", codes, perl=TRUE)
# => [1] "2-1014"   "20-14"    "14-10"    "0-122345"

请参阅R 演示正则表达式演示

\b匹配字符串开头或非单词字符与单词字符之间的位置,此处为字符串开头或与-下一个数字之间的位置。0+尽可能多地匹配一个或多个零。\B确保匹配在一个数字之前停止,因此数字中只有零,最后一个保持不变。


推荐阅读