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" "" ""
Powyższe wyrażenie regularne pochodzi z tego wątku SO wyjaśniającego, jak usunąć wszystkie zera wiodące z ciągu w R. W wyniku tego wyrażenia regularnego zarówno „000”, jak i „0” są przekształcane w „”. Zamiast tego chcę usunąć wszystkie wiodące zera z ciągu znaków, z wyjątkiem przypadków, gdy końcowy znak ma wartość zero lub jedynym znakiem jest zero.
"005" would become "5"
"0AB" would become "AB"
"000" would become "0"
"0" would become "0"
Ten drugi wątek SO wyjaśnia, jak zrobić to, co chcę, ale nie wydaje mi się, że otrzymuję poprawną składnię, stosując rozwiązanie w R. I tak naprawdę nie rozumiem różnicy między pierwszym i drugim rozwiązaniem poniżej ( jeśli rzeczywiście działały).
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"
Jaki jest poprawny wyraz regularny w R, aby uzyskać to, czego chcę?
regex
Nowicjusz. Jaka jest różnica w wydajności (lub innych preferencjach) między twoim wzorcem a tym^0*(.+)$
lub^0+(.+)$
?