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" "" ""
A expressão regular acima é desse encadeamento SO, explicando como remover todos os zeros à esquerda de uma sequência em R. Como conseqüência dessa expressão regular, "000" e "0" são transformados em "". Em vez disso, quero remover todos os zeros à esquerda de uma sequência de caracteres, exceto nos casos em que o caractere final é zero ou o único caractere é zero.
"005" would become "5"
"0AB" would become "AB"
"000" would become "0"
"0" would become "0"
Esse outro thread do SO explica como fazer o que eu quero, mas acho que não estou obtendo a sintaxe correta, aplicando a solução em R. E realmente não entendo a distinção entre a 1ª e a 2ª solução abaixo ( se eles realmente funcionaram).
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"
Qual é a regex adequada em R para obter o que eu quero?
regex
novato. Qual é a diferença de desempenho (ou outras preferências) entre seu padrão e este^0*(.+)$
ou^0+(.+)$
?.
podem corresponder0
e os dois padrões adjacentes são quantificados indefinidamente, mas apenas um pouquinho.Podemos adicionar mais uma condição com uma pesquisa de expressão regular para verificar se há valores diferentes de zero após um ou mais zeros (
0+
)dados
fonte
regex
guru, mas as visões não são eficientes, são? Como você tem dois,sub
você pode remover todos os zeros à esquerda e substituí-los""
por0
?sub("^$", "0", sub("^0+", "", v1), perl = TRUE)
Usando um limite que não seja da palavra . Veja esta demonstração em regex101 ou uma demonstração R em tio.run .
\B
Isso não corresponderá ao último zero, porque, à direita, não há caracteres de palavras .
fonte
Você pode usar uma alternância para corresponder a todos os zeros na sequência em um grupo de captura ou corresponder a todos os zeros desde o início da sequência.
No grupo de substituição, use 1.
Regex demo | R demo
Por exemplo
Resultado
Ou melhor ainda, como comentado pelo Wiktor Stribiżew , você pode usar capturar um único 0 em um grupo e repetir o próprio grupo para capturar a última instância de um zero.
Regex demo
fonte
^(0)+$|^0+
sub("^0+(?!$)", "", x, perl=TRUE)
também vai funcionarOutro
regex
opção:Aqui está um demonstração do regex .
Usando
base::sub
em R:Aqui está um R demonstração .
Ou expandindo a resposta de @ akrun :
fonte