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+
significae
e depoisy
“uma vez ou mais”. Por exemplo, reconhecehey
,heyy
,a eyyy
, mas não reconhecee
,y
nemyy
.ey*
significa “zero vezes ou mais”. Por exemplo, reconhecehey
,heyy
,a eyyy
ee
, mas não reconhecey
nemyy
.ey{3}
significa “exatamente três vezes”. Por exemplo, reconheceeyyy
eeyyyy
, 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]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 exemplodesfavor|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()
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.