1
resposta

[Dúvida] Está conforme a atividade?

import re

nome = input("Digite o nome do paciente: ")
idade = input("Digite a idade do paciente: ")
altura = input("Digite a altura do paciente: ")
peso = input("Digite o peso do paciente: ")
ano = input("Digite o ano de nascimento do paciente: ")

regex = r"Nome: (\w+)\s+Idade: (\d+)\s+Altura: (\d+\.\d+)\s+Peso: (\d+\.\d+)\s+Ano: (\d{4})"

match = re.match(regex, "Nome: {} Idade: {} Altura: {} Peso: {} Ano: {}".
                 format(nome, idade, altura, peso, ano))
if match:
    print("Nome: {}".format(match.group(1)))
    print("Idade: {}".format(match.group(2)))
    print("Altura: {}".format(match.group(3)))
    print("Peso: {}".format(match.group(4)))
    print("Ano: {}".format(match.group(5)))
else:
    print("Dados do paciente inválidos.")

Adoto o .format() em todos os projetos por padronização, pois seu conceito é análogo ao do método .formatted() do Java, o que facilita a leitura e a manutenção do código entre linguagens.

1 resposta

Oii Samuel,

Achei muito legal você trazer essa comparação com o Java. Realmente, o .format() funciona de maneira muito similar e, se isso te ajuda a manter a lógica clara na cabeça transitando entre as linguagens, é uma ótima estratégia de aprendizado.

Sobre o código, você aplicou corretamente a sintaxe do Regex e o uso dos grupos (match.group). Porém, tenho dois pontos importantes para te ajudar a alinhar com o objetivo do exercício e com cenários reais de análise de dados:

1. O objetivo da atividade (Parsing vs. Construção)
O desafio propunha um cenário comum em ciência de dados: recebemos um dado "sujo" ou formatado de um jeito específico (uma única string vinda de um arquivo ou log) e precisamos extrair informações dele.
No seu código, você pediu os dados separadamente e construiu a string para depois aplicar o Regex. Isso gera uma redundância, entende? Se você já tem as variáveis separadas no input, não precisaria do Regex.
O desafio real é: Receber "Samuel Freitas - 1995" (tudo junto) e fazer o código separar.

2. O problema do \w+ com nomes compostos
Na sua regex: Nome: (\w+), o metacaractere \w pega apenas letras, números e underline. Ele não pega espaços.
Se o usuário digitar "Samuel Freitas", o seu regex vai falhar ou pegar apenas "Samuel", fazendo com que o match retorne None e caia no else.
Para aceitar nomes compostos, você precisaria de algo como ([\w\s]+) (letras e espaços).

Sugestão de Desafio:
Tente refazer usando apenas um input que receba tudo de uma vez, como o enunciado pede. Isso vai treinar sua habilidade de "quebrar" textos prontos.

Exemplo de estrutura:

import re

# Entrada única, simulando um dado vindo de um sistema
entrada = input("Digite no formato 'Nome Sobrenome - Ano': ")

# O desafio é criar a regex que separa isso
regex = r"(\w+) (\w+) - (\d{4})"
# ... resto do código

Parabéns por manter a consistência no estilo de código com o .format(), isso mostra disciplina!

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!