Python: Analisando valores numéricos da string usando expressões regulares

Estou escrevendo código python para analisar diferentes tipos de números de uma string usando expressões regulares e encontrei um problema irritante que eu não entendo.

Meu código é o seguinte:

import re    

test_string = "Distributions $54.00 bob $26 and 0.30 5% ($0.23) 2,333,450"

num_values = re.findall(r"\(?\$?[0-9]+.?[0-9]*%?\)?|[0-9]+(?:,[0-9]+)*", test_string)

A saída é:

['$54.00', '0.30', '5%', '($0.23)', '2,333', '450']

Portanto, o código está funcionando muito bem para tudo, exceto a string '2,333,450', que por algum motivo é dividida em dois elementos.

O irritante é que, quando eu inverto a ordem da expressão regular:

num_values = re.findall(r"[0-9]+(?:,[0-9]+)*|\(?\$?[0-9]+.?[0-9]*%?\)?", test_string)

Eu recebo esta saída:

['$54.00', '$26 ', '0', '30', '5', '($0.23)', '2,333,450']

Portanto, minha string '2,333,450' sai bem, mas não consigo analisar corretamente os números com% símbolos ou pontos decimais (a menos que esteja entre colchetes).

Qualquer insight seria apreciado.

questionAnswers(2)

yourAnswerToTheQuestion