Aula 7 - RegEx e APIs

Testar RegEx

re

  • Importar biblioteca:

    import re
    
  • Criar padrão do RegEx à ser procurado:

    tel_regex = re.compile(r'\(\d\d\) \d\d\d\d\d\-\d\d\d\d')
    
  • Buscar correspondência na string inteira:

    coleta = tel_regex.search('Meu número é (41) 99123-4567')
    
  • Coletar a única combinação completa:

    print(coleta.group(0))
    # output: (41) 99123-4567
    
  • Fazer grupos com parênteses:

    grupos_regex = re.compile(r'(\d{2}) (\d{4,5})\-(\d{4})')
    coleta = grupos_regex.search('Meu número é 41 99123-4567')
    
  • Coletar dados dos grupos encapsulados pelo parênteses:

    # Usando index
    print(f'Este é o grupo 0: {coleta.group(0)}')
    # output: 41 99123-4567
    
    print(f'Este é o grupo 1: {coleta.group(1)}')
    # output: 41
    
    print(f'Este é o grupo 2: {coleta.group(2)}')
    # output: 99123
    
    print(f'Este é o grupo 3: {coleta.group(3)}')
    # output: 4567
    
    # Tupla com os valores dos grupos
    coleta.groups()
    # output: ('41', '99123', '4567')
    
  • Selecionar uma palavra ou outra:

    regex_ou = re.compile('Wilber|Thomas')
    
    coleta = regex_ou.search('Olá, meu nome é Wilber')
    
    print(coleta.group())
    # output: Wilber
    
    coleta = regex_ou.search('Olá, meu nome é Thomas')
    
    print(coleta.group())
    # output: Thomas
    
  • Selecionar parcialmente uma palavra ou outra:

    regex_ou = re.compile('Wil(ber|mar)')
    
    coleta = regex_ou.search('Olá, meu nome é Wilber')
    
    print(coleta.group())
    # output: Wilber
    
    coleta = regex_ou.search('Olá, meu nome é Wilmar')
    
    print(coleta.group())
    # output: Wilmar
    
  • Elemento opcional no meio de uma palavra/frase (existe ou não existe):

    regex_bat = re.compile(r'Bat(wo)?man')
    
    coleta = regex_bat.search('As aventuras de Batman')
    
    print(coleta.group())
    # output: Batman
    
    coleta = regex_bat.search('As aventuras da Batwoman')
    
    print(coleta.group())
    # output: Batwoman
    
  • Repetição indefinida (0 ou 1 até o infinito):

    # 0 até o infinito
    regex_risada = re.compile(r'(HA)*')
    
    # 1 até o infinito
    regex_risada = re.compile(r'(HA)+')
    
    coleta = regex_risada.search('HAHAHAHAHA! Está foi uma excelente piada!')
    
    print(coleta.group())
    # output: HAHAHAHAHA
    
  • Localizar mais de uma correspondência (resultado em lista):

    tel_regex = re.compile(r'\(\d{2}\) \d{4,5}\-\d{4}')
    
    coleta = tel_regex.findall('Meu número residencial é (41) 99123-4567 e meu número de celular é (41) 3123-4567')
    
    print(coleta)
    # output: ['(41) 99123-4567', '(41) 3123-4567']
    
  • Correspondência no início da frase/texto:

    regex_inicio = re.compile(r'^Sabia')
    
    coleta = regex_inicio.search('Sabia que o significado da vida, do universo e tudo mais é 42?')
    
    print(coleta.group())
    # output: Sabia
    
  • Correspondência no final da frase/texto:

    regex_inicio = re.compile(r'\d{2}$')
    
    coleta = regex_inicio.search('O significado da vida, do universo e tudo mais é 42')
    
    print(coleta.group())
    # output: 42
    
  • Caractere coringa:

    regex_coringa = re.compile(r'.at')
    
    coleta = regex_coringa.findall('The cat with the hat hit a bat')
    
    print(coleta)
    # output: ['cat', 'hat', 'bat']
    
  • Correspondência sem saber a palavra, mas tendo uma frase padrão:

    regex_tudo = re.compile(r'Primeiro nome: (.*) Segundo Nome: (.*)')
    
    coleta = regex_tudo.search('Primeiro nome: Harry Segundo Nome: Potter')
    
    print(coleta.group(1))
    # output: Harry
    
    print(coleta.group(2))
    # output: Potter
    
  • Remover Case Sensitive (diferença entre maiúsculas e minúsculas) do RegEx:

    regex_cases = re.compile(r'metallica', re.IGNORECASE)
    
    coleta = regex_cases.search('METALLICA é uma banda de muito sucesso!')
    
    print(coleta.group())
    # output: METALLICA
    
  • Substituir valores:

    regex_sub = re.compile(r'\d')
    
    coleta = regex_sub.sub('*', 'Meu número residencial é (41) 99123-4567 e meu número de celular é (41) 3123-4567')
    
    print(coleta)
    # output: Meu número residencial é (**) *****-**** e meu número de celular é (**) ****-****
    
  • Separar uma frase através de um padrão:

    regex_separador = re.compile(r'\s')
    
    coleta = regex_separador.split('METALLICA é uma banda de muito sucesso!')
    
    print(coleta)
    # output: ['METALLICA', 'é', 'uma', 'banda', 'de', 'muito', 'sucesso!']
    
  • Padrões prontos:

  • Buscar por CPF:

    ```python
    regex_cpf = re.compile(r'\d{3}\.?\d{3}\.?\d{3}\-?\d{2}')
    
    coleta = regex_cpf.findall('O seu CPF é 470.485.110-95 e o meu é 11745629009')
    
    print(coleta)
    # output: ['470.485.110-95', '11745629009']
    ```
    
  • Busca por telefone:

    ```python
    regex_tel = re.compile(r'\(?\d{2}\)?\s?\d{4,5}\-?\d{4}')
    
    coleta = regex_tel.findall("O seu telefone fixo é (41) 3123-4567, já o celular é 41 99123-4567 e o meu seria 4131234567.")
    
    print(coleta)
    # output: ['(41) 3123-4567', '41 99123-4567', '4131234567']
    ```
    
  • Busca por Email:

    ```python
    regex_email = re.compile(r'(?:\w+\.)*\w*\@\w*(?:\.\w+)+')
    
    coleta = regex_email.findall('O seu e-mail é tiara.hessel9@yahoo.com, o meu e-mail é shaun_nitzsche96@hotmail.com e acredito que podemos criar um e-mail em conjunto chamado alphonso19@outlook.com.br.')
    
    print(coleta)
    # output: ['tiara.hessel9@yahoo.com', 'shaun_nitzsche96@hotmail.com', 'alphonso19@outlook.com.br']
    ```
    

APIs

Bibliotecas:

  • requests
  • json

Funcionalidades:

  • GET
  • API de teste:

    ```python
    import requests
    
    url = "https://reqres.in/api/users?page=2"
    
    response = requests.get(url)
    
    r_json = response.json()
    
    print(r_json['data'][0]['email'])
    # output: michael.lawson@reqres.in
    ```
    
  • API de Universidades no Brasil:

    ```python
    import requests
    
    url = "http://universities.hipolabs.com/search?country=brazil"
    
    response = requests.get(url)
    
    r_json = response.json()
    
    print(r_json[15]['name'])
    # output: Universidade Regional de Blumenau
    ```
    
  • Exemplos GET:

  • POST:
  • Cadastrar usuário de teste:

    ```python
    import requests
    import json
    
    url = "https://reqres.in/api/users"
    
    payload = json.dumps({
      "name": "Harry Potter",
      "job": "Desenvolvedor RPA"
    })
    headers = {
      'Content-Type': 'application/json'
    }
    
    response = requests.post(url, headers=headers, data=payload)
    
    r_json = response.json()
    
    print(r_json['job'])
    # output: Desenvolvedor RPA
    ```
    
  • PUT:

  • Serve para atualizar algum dado em base através de API.
  • DELETE:
  • Serve para apagar algum dado em base através de API.

Extras

APIs para "Brincar"

Aprender RegEx