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+significaee depoisy“uma vez ou mais”. Por exemplo, reconhecehey,heyy,a eyyy, mas não reconhecee,ynemyy.ey*significa “zero vezes ou mais”. Por exemplo, reconhecehey,heyy,a eyyyee, mas não reconheceynemyy.ey{3}significa “exatamente três vezes”. Por exemplo, reconheceeyyyeeyyyy, mas não reconheceeyy.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]asapara 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 exemplodesfavor|desprovreconhece tanto “desfavorável” quanto “desprovido” \npula linha,\fé final da página,\té tab. Use\para transformar caracteres especiais em literais.str_to_lower()estr_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.