Estou tentando extrair um número de uma string.
E faça algo como [0-9]+
na corda "aaa12xxx"
e pegue "12"
.
Eu pensei que seria algo como:
> grep("[0-9]+", "aaa12xxx", value=TRUE)
[1] "aaa12xxx"
E então eu percebi ...
> sub("[0-9]+", "\\1", "aaa12xxx")
[1] "aaaxxx"
Mas recebi algum tipo de resposta fazendo:
> sub("[0-9]+", "ARGH!", "aaa12xxx")
[1] "aaaARGH!xxx"
Há um pequeno detalhe que estou perdendo.
?str_extract
, vi que astr_extract_all
vida estava boa novamente.Provavelmente é um pouco precipitado dizer ' ignorar as funções padrão ' - o arquivo de ajuda para
?gsub
referências específicas em 'Consulte também':Portanto, isso funcionará e é bastante simples:
fonte
Talvez
fonte
Você pode usar a correspondência lenta de regexs PERL:
Tentar substituir não dígitos levará a um erro neste caso.
fonte
Uma maneira seria esta:
Agora, observe que regexpr fornece os índices inicial e final da string:
Então você pode usar essa informação com a função substr
Tenho certeza de que existe uma maneira mais elegante de fazer isso, mas foi a maneira mais rápida que encontrei. Alternativamente, você pode usar sub / gsub para retirar o que você não deseja, deixando o que deseja.
fonte
Use a captura de parênteses na expressão regular e referências de grupo na substituição. Qualquer coisa entre parênteses é lembrada. Em seguida, eles são acessados por \ 2, o primeiro item. A primeira barra invertida escapa da interpretação da barra invertida em R para que seja passada para o analisador de expressão regular.
fonte
Usando o strapply no pacote gsubfn. Strapply é como apply, pois os args são objeto, modificador e função, exceto que o objeto é um vetor de strings (em vez de uma matriz) e o modificador é uma expressão regular (em vez de uma margem):
Isso diz para combinar um ou mais dígitos (\ d +) em cada componente de x, passando cada correspondência por as.numeric. Ele retorna uma lista cujos componentes são vetores de correspondências dos respectivos componentes de x. Olhando a saída em, vemos que o primeiro componente de x tem uma correspondência que é 13 e o segundo componente de x tem duas correspondências, que são 12 e 34. Consulte http://gsubfn.googlecode.com para obter mais informações.
fonte
Outra solução:
fonte
Uma diferença importante entre essas abordagens é o comportamento com quaisquer não correspondências. Por exemplo, o método regmatches pode não retornar uma string do mesmo comprimento da entrada se não houver uma correspondência em todas as posições
fonte
Uma solução para esta questão
[[: dígito:]] : dígito [0-9]
{1,} : Corresponde pelo menos 1 vezes
fonte
Usando o pacote unglue , faríamos o seguinte:
Criado em 06/11/2019 pelo pacote reprex (v0.3.0)
Use o
convert
argumento para converter para um número automaticamente:fonte
Você pode escrever suas funções regex com C ++, compilá-las em uma DLL e chamá-las de R.
chame R como
fonte