O re.search
(ver documentação) procura pela primeira ocorrência do padrão na string. Nesse caso, ele vai dar esse match:
"Nome:Ana, CPF:123.456.789-89777777777777740"
Têm algumas formas de resolver isso.
Usar o re.match
Usando o re.match, sua string não seria validada, porque o match procura apenas a partir do começo da string.
Mas algo como "123.456.789-89777777777777740"
seria validado:
"123.456.789-89777777777777740"
Usar caracteres especiais do regex: ^ e $
- O caracter ^ para indicar match no começo da string
- O caracter $ para indicar match no fim da string
Na documentação do python há uma explicação suscinta sobre alguns caracteres especiais do regex. Mas o regex é uma linguagem muito usada em vários contextos, vc consegue encontrar material mais explicativo sobre isso.
Enfim, seu código ficaria assim para dar match em apenas strings que contivessem apenas esse padrão, nada mais nem nada menos. (e usando tanto search quanto match)
padrao = re.compile(r"^([0-9]{3}[.]?[0-9]{3}[.]?[0-9]{3}[-]?[0-9]{2})$")
Dica Final
ps: Tem um site bem legal para praticar regex. https://regexr.com/
Dá para testar contra varios textos, tem um cheatsheet e explicações sobre caracteres especiais, sobre padrões. Se vc fizer uma conta dá para salvar seus padrões tb.
Não é especifico para python. Como vc viu ai, no caso do match vs search, tem coisas que são específicas da linguagem, mas para praticar no geral é bem util.