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» получается хорошо, но тогда я не могу правильно проанализировать числа с символами% или десятичными точками (если это не в скобках).
Любое понимание будет оценено.