31
Caso de uso: RegEx
Podemos identificar padrões em uma cadeia de caracteres usando Expressões Regulares (Regular Expression ou RegEx).
Para validar o formato de um CPF, por exemplo, é necessário que esteja no seguinte padrão:
xxx.xxx.xxx-xx
(cada x
corresponde à um dígito decimal)Então através de uma RegEx conseguimos identificar se esse padrão foi seguido ou não.
Usando a linguagem de programação Python, importa-se o módulo
re
que fornece operações de expressões regulares.import re
Cria-se uma função
validar
a qual recebe uma string cpf
, ela retorna válido
ou inválido
.def validar(cpf):
validador = expressao.match(cpf)
if validador:
return 'válido'
return 'inválido'
Usando a função
re.match
, compara-se o cpf
com a expressão regular compilada expressao
, ela retorna um Match Object
caso combine, do contrário retorna None
, o valor é atribuído à variável validador
.A expressão escrita a seguir contém alguns símbolos com significado especial, são eles:
^
sinaliza o início de uma linha ou string$
sinaliza o fim de uma linha ou string\d
corresponde aos dígitos decimais de 0 a 9Um detalhe importante, o uso de
.
também possui um significado especial e para retirar esse significado usa-se a \
antes do caracter, assim ele se torna o .
(ponto literal).expressao = re.compile(r'^\d\d\d\.\d\d\d\.\d\d\d-\d\d$')
Essa expressão é escrita de uma forma simples, repetindo os caracteres no formato esperado.
Podemos reescrevê-la usando mais recursos implementados no módulo
re
, usando o conceito de repetição de elementos da RegEx representados por chaves {}
, aplicando-o ao conjunto de dígitos \d
que é repetido um certo número de vezes, obtem-se:expressao = re.compile(r'^\d{3}\.\d{3}\.\d{3}-\d{2}$')
Outra forma de expressar a RegEx é usando o conceito de grupos. Nesse caso podemos agrupar um trecho do formato que se repete, fazendo um grupo de 3 dígitos e um
.
(ponto literal), que devem ser repetidos duas vezes.expressao = re.compile(r'^(\d{3}\.){2}\d{3}-\d{2}$')
Usaremos quatro exemplos para testar a validação do CPF:
a = '111.222.333-44'
b = '1234.123.789-88'
c = '123.12.789-88'
d = 'abs.ert.yui.lk'
print(f'''
O CPF: {a} é {validar(a)}
O CPF: {b} é {validar(b)}
O CPF: {c} é {validar(c)}
O CPF: {d} é {validar(d)}
''')
Analisando a saída obtida, notamos que:
a
está no formato correto.b
contém mais dígitos do que o esperado no primeiro trecho.c
contém menos dígitos do que o esperado no segundo trecho.d
apresenta caracteres não-dígitos, sendo inválido.
O CPF: 111.222.333-44 é válido
O CPF: 1234.123.789-88 é inválido
O CPF: 1234.12.789-88 é inválido
O CPF: abs.ert.yui.lk é inválido
Vimos que uma RegEx pode ser escrita de várias formas para validar o mesmo padrão e ainda existem diversas outras maneiras, podendo levar em conta a legibilidade ou complexidade da escrita para fazer sua escolha.
Aprendendo mais sobre os recursos do módulo re do Python.
Estudando mais sobre expressões regulares.
Se escreve caracter/caráter/caracteres?
Enjoy!
31