首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >串-从连字符两边移除前导零

串-从连字符两边移除前导零
EN

Stack Overflow用户
提问于 2021-01-27 20:18:51
回答 2查看 174关注 0票数 2

每标题,我正在寻找一种方法,以删除两个连字号两侧的前导零。

代码语言:javascript
复制
codes <- c("0002-01014", "0020-0014","00014-00010")
want <- c("2-1014","20-14","14-10")

我想可以将数字分成两部分,去掉前导零,然后粘贴到一起,但我想知道是否有更精确的方法使用str_extract()str_replace()或相似的一步。

编辑:

我目前正在使用

代码语言:javascript
复制
str_split("0002-01010","-",simplify=T) %>%
  str_replace("^0+(?!$)", "") %>%
  str_c(collapse="-")

我很好奇是否有一种可以在单行中实现的方法。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-01-27 20:26:40

您可以使用

代码语言:javascript
复制
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演示regex演示

\b匹配字符串开始或非字字符和单词字符之间的位置,在这里,在字符串的开头,或者在-和下一个数字之间。0+匹配一个或多个零,尽可能多。\B确保匹配在一个数字之前停止,所以在数字中只有零,最后一个保持不变。

票数 4
EN

Stack Overflow用户

发布于 2021-01-27 22:07:40

你最好在破折号开始或之后匹配和移除零,而不是在终点或破折号之前:

代码语言:javascript
复制
codes <- c("0002-01014", "0020-0014","00014-00010", "00000-000330")
gsub("(^|-)0+(?!-|$)", "\\1", codes, perl=TRUE)

R证明。见正则证明

表达式解释

代码语言:javascript
复制
--------------------------------------------------------------------------------
  (                        group and capture to \1:
--------------------------------------------------------------------------------
    ^                        the beginning of the string
--------------------------------------------------------------------------------
   |                        OR
--------------------------------------------------------------------------------
    -                        '-'
--------------------------------------------------------------------------------
  )                        end of \1
--------------------------------------------------------------------------------
  0+                       '0' (1 or more times (matching the most
                           amount possible))
--------------------------------------------------------------------------------
  (?!                      look ahead to see if there is not:
--------------------------------------------------------------------------------
    -                        '-'
--------------------------------------------------------------------------------
   |                        OR
--------------------------------------------------------------------------------
    $                        before an optional \n, and the end of
                             the string
--------------------------------------------------------------------------------
  )                        end of look-ahead
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65926745

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档