Jas*_*ter 9 regex string r gsub stringr
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" "" ""
Run Code Online (Sandbox Code Playgroud)
上面的正则表达式来自这个 SO 线程,解释了如何从 R 中的字符串中删除所有前导零。作为这个正则表达式的结果,“000”和“0”都被转换为“”。相反,我想从字符串中删除所有前导零,除了最后一个字符恰好为零或唯一字符为零的情况。
"005" would become "5"
"0AB" would become "AB"
"000" would become "0"
"0" would become "0"
Run Code Online (Sandbox Code Playgroud)
另一个 SO 线程解释了如何做我想做的事,但我认为我的语法不太正确,在 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"
Run Code Online (Sandbox Code Playgroud)
R 中的正确正则表达式是什么才能得到我想要的?
您可以删除字符串开头的所有零,但不能删除最后一个:
sub("^0+(?!$)", "", x, perl=TRUE)
Run Code Online (Sandbox Code Playgroud)
请参阅正则表达式演示。
细节
^
- 字符串的开始0+
- 一个或多个零(?!$)
- 如果在当前位置的右侧有字符串结尾位置,则匹配失败的负前瞻请参阅R 演示:
x <- c("005", "0AB", "000", "0")
sub("^0+(?!$)", "", x, perl=TRUE)
## => [1] "5" "AB" "0" "0"
Run Code Online (Sandbox Code Playgroud)