Python: парсинг числовых значений из строки с использованием регулярных выражений

Я пишу код Python для анализа различных типов чисел из строки с помощью регулярных выражений и столкнулся с досадной проблемой, которую я не понимаю.

Мой код выглядит следующим образом:

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)

Выход:

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

Таким образом, код отлично работает для всего, кроме строки «2,333,450», которая по какой-то причине разделена на два элемента.

Раздражает то, что когда я меняю порядок регулярного выражения:

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

Я получаю этот вывод:

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

Таким образом, моя строка «2,333,450» получается хорошо, но тогда я не могу правильно проанализировать числа с символами% или десятичными точками (если это не в скобках).

Любое понимание будет оценено.

Ответы на вопрос(2)

Ваш ответ на вопрос