Olá!
Já mostramos o módulo Re no Python para trabalharmos com expressões regulares em "As Expressões Regulares - Python Módulo Re" http://www.artedosdados.com.br/2015/01/as-expressoes-regulares-python-modulo-re.html
Vamos falar um pouco agora sobre este recurso no R. Em sua documentação, temos a seção Pattern Matching and Replacement, que traz as funções grep, grepl, regexpr e gregexpr. Este será o foco do post de hoje.
Começando pela função grep, ela possui a seguinte sintaxe:
grep(pattern, x, ignore.case = FALSE, perl = FALSE, value = FALSE, fixed = FALSE, useBytes = FALSE, invert = FALSE)
Entramos com a regex como o primeiro argumento e o vetor de entrada como segundo. Todas as funções de regex no R são case sensitive, podendo ser parametrizadas pelo argumento igonore.case.
O argumento value, caso seja FALSE, retorna o índice das posições do padrão procurado no vetor de entrada. Caso seja verdadeiro, retorna o próprio valor. Um exemplo:
> grep("a+", c("Antonia", "Denis", "Carlos", "Leandro"), perl=TRUE, value=FALSE)
[1] 1 3 4
> grep("a+", c("Antonia", "Denis", "Carlos", "Leandro"), perl=TRUE, value=TRUE)
[1] "Antonia" "Carlos" "Leandro
Há também a função grepl. Sua diferença para a grep é que ela não possui o argumento value. Ela apenas retornará um vetor lógico da regex procurada.
grepl("a+", c("Antonia", "Denis", "Carlos", "Leandro"), perl=TRUE)
[1] TRUE FALSE TRUE TRUE
Uma função muito interessante é a regexpr. Ela possui os mesmos argumentos da grepl, mas gera um output muito interessante. Ela retorna o índice da posição da regex na entrada e a quantidade de padrões existentes quando há um match. Quando não existe nenhuma correspondência, ela retorna o valor -1.
regexpr("a+", c("Antonia", "Denis", "Carlos", "Leandro"), perl=TRUE)
[1] 7 -1 2 3
attr(,"match.length")
[1] 1 -1 1 1
Por fim, a função gregexper tem a mesma estrutura da anterior, diferindo apenas no retorno. Ela traz a informação separada para cada input.
> gregexpr("a+", c("Antonia", "Denis", "Carlos", "Leandro"), perl=TRUE)
[[1]]
[1] 7
attr(,"match.length")
[1] 1
attr(,"useBytes")
[1] TRUE
[[2]]
[1] -1
attr(,"match.length")
[1] -1
attr(,"useBytes")
[1] TRUE
Um abraço e até o próximo post!
0 comentários:
Postar um comentário