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.