4.4 Expressões regulares

Expressão regular ou regex é uma sequência concisa de caracteres que representa várias strings. Entender o básico de expressões regulares é indispensável para trabalhar com jurimetria.

Vamos estudar expressões regulares através de exemplos e com a função str_view().

A tabela abaixo mostra a aplicação de seis regex a seis strings distintas.

txt <- c('ban', 'banana', 'abandonado', 'paraíba né', 'BANANA', 'ele levou ban')
expressoes <- list(
  'ban', # reconhece tudo que tenha "ban", mas não ignora case
  'BAN', # reconhece tudo que tenha "BAN", mas não ignora case
  'ban$', # reconhece apenas o que termina exatamente em "ban"
  '^ban', # reconhece apenas o que começa exatamente com "ban"
  'ba ?n' # reconhece tudo que tenha "ban", com ou sem espaço entre o "b" e o "a"
)
# Desafio: entender o código que gera essa tabela ;)
list(txt = txt, regex = expressoes) %>% 
  cross_df() %>% 
  mutate(result = map2_lgl(txt, regex, str_detect),
         result = if_else(result, "X", "")) %>% 
  distinct() %>% 
  spread(txt, result) %>% 
  knitr::kable()
regex abandonado ban banana BANANA ele levou ban paraíba né
^ban X X
ba ?n X X X X X
ban X X X X
BAN X
ban$ X X

4.4.1 Quantificadores

Os caracteres +, * e {x,y} indicam quantas vezes um padrão se repete:

  • ey+ significa e e depois yuma vez ou mais”. Por exemplo, reconhece hey, heyy, a eyyy, mas não reconhece e, y nem yy.
  • ey* significa “zero vezes ou mais”. Por exemplo, reconhece hey, heyy, a eyyy e e, mas não reconhece y nem yy.
  • ey{3} significa “exatamente três vezes”. Por exemplo, reconhece eyyy e eyyyy, mas não reconhece eyy.
  • ey{1,3} significa “entre uma e três vezes”.

Para aplicar um quantificador a um conjunto de caracteres, use parênteses. Por exemplo, (ey )+ reconhece ey ey.

4.4.2 Conjuntos

Colocando caracteres dentro de [], reconhecemos quaisquer caracteres desse conjunto. Alguns exemplos práticos:

  • [Cc]asa para reconhecer “casa” em maiúsculo ou minúsculo.
  • [0-9] para reconhecer somente números. O mesmo vale para letras [a-z], [A-Z], [a-zA-Z] etc.
  • O símbolo ^ dentro do colchete significa negação. Por exemplo, [^0-9] significa pegar tudo o que não é número.
  • O símbolo . fora do colchete indica “qualquer caractere”, mas dentro do colchete é apenas ponto.
  • Use [[:space:]]+ para reconhecer espaços e [[:punct:]]+ para reconhecer pontuações.

4.4.3 Miscelânea

  • Use | para opções, por exemplo desfavor|desprov reconhece tanto “desfavorável” quanto “desprovido”
  • \n pula linha, \f é final da página, \t é tab. Use \ para transformar caracteres especiais em literais.
  • str_to_lower() e str_to_upper() para mudar o case de uma string.

A lista de possibilidades com expressões regulares é extensa. Um bom lugar para testar o funcionamento de expressões regulares é o regex101.