DEV Community

Cover image for Caso de uso: RegEx
Bruna Ferreira for Feministech

Posted on • Edited on

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.

Introdução

Usando a linguagem de programação Python, importa-se o módulo re que fornece operações de expressões regulares.

import re
Enter fullscreen mode Exit fullscreen mode

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'
Enter fullscreen mode Exit fullscreen mode

Primeiro caso

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 9

Um 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$')
Enter fullscreen mode Exit fullscreen mode

Essa expressão é escrita de uma forma simples, repetindo os caracteres no formato esperado.

Evitando repetição de elementos

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}$')
Enter fullscreen mode Exit fullscreen mode

Evitando repetição de trechos

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}$')
Enter fullscreen mode Exit fullscreen mode

Exemplos de execução

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)}
    ''')
Enter fullscreen mode Exit fullscreen mode

Analisando a saída obtida, notamos que:

  • O exemplo a está no formato correto.
  • O exemplo b contém mais dígitos do que o esperado no primeiro trecho.
  • O exemplo c contém menos dígitos do que o esperado no segundo trecho.
  • O exemplo 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
Enter fullscreen mode Exit fullscreen mode

Considerações

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!

Top comments (1)

Collapse
 
lelepg profile image
Letícia Pegoraro Garcez

Nossa, adorei esse caso de uso!
Gostei muito que tu criou uma expressão bem simples que já seria capaz de resolver o problema e ai foi refinando essa expressão pra aplicar mais conceitos das expressões regulares.
Regex é com certeza um conteúdo extremamente interessante, e que muitas vezes acaba não recebendo a devida atenção.