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!
Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!