gpt4 book ai didi

正则表达式删除R中的前导零,除非最终(或唯一)字符为零

转载 作者:行者123 更新时间:2023-12-04 05:15:59 25 4
gpt4 key购买 nike

gsub("(?<![0-9])0+", "", c("005", "0AB", "000", "0"), perl = TRUE)
#> [1] "5" "AB" "" ""
gsub("(^|[^0-9])0+", "\\1", c("005", "0AB", "000", "0"), perl = TRUE)
#> [1] "5" "AB" "" ""

is from this SO thread上方的正则表达式解释了如何从R中的字符串中删除所有前导零。由于此正则表达式,“000”和“0”都转换为“”。相反,我希望从字符串中删除所有前导零,但最终字符恰好为零或唯一字符为零的情况除外。
"005" would become "5"
"0AB" would become "AB"
"000" would become "0"
"0" would become "0"

This other SO thread解释了如何做我想做的事,但我认为我在使用R中的解决方案时语法不是很正确。而且我不太理解下面的第一和第二解决方案之间的区别(如果它们确实工作)。
gsub("s/^0*(\d+)$/$1/;", "", c("005", "0AB", "000", "0"), perl = TRUE)  # 1st solution
# Error: '\d' is an unrecognized escape in character string starting ""s/^0*(\d"
gsub("s/0*(\d+)/$1/;", "", c("005", "0AB", "000", "0"), perl = TRUE) # 2nd solution
# Error: '\d' is an unrecognized escape in character string starting ""s/0*(\d"

R中正确的正则表达式是什么才能得到我想要的?

最佳答案

您可以从字符串的开头删除所有零,但不能删除最后一个:

sub("^0+(?!$)", "", x, perl=TRUE)

参见 regex demo

详细信息
  • ^-字符串开始
  • 0+-一个或多个零
  • (?!$)-如果当前位置右侧的字符串位置的末尾紧邻字符串,则匹配失败的负前行

  • 参见 R demo:
    x <- c("005", "0AB", "000", "0")
    sub("^0+(?!$)", "", x, perl=TRUE)
    ## => [1] "5" "AB" "0" "0"

    关于正则表达式删除R中的前导零,除非最终(或唯一)字符为零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59428774/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com