quinta-feira, 12 de março de 2015

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