Python: Analysiert numerische Werte aus einem String mit regulären Ausdrücken

Ich schreibe Python-Code, um verschiedene Arten von Zahlen aus einer Zeichenfolge mit regulären Ausdrücken zu analysieren, und stoße dabei auf ein lästiges Problem, das ich nicht verstehe.

Mein Code lautet wie folgt:

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)

Die Ausgabe ist:

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

Der Code funktioniert also für alles außer für die Zeichenfolge '2,333,450', die aus irgendeinem Grund in zwei Elemente unterteilt wird.

Das Ärgerliche ist, wenn ich die Reihenfolge des regulären Ausdrucks umkehre:

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

Ich bekomme diese Ausgabe:

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

Meine '2,333,450'-Zeichenfolge ist also in Ordnung, aber dann kann ich Zahlen mit% -Symbolen oder Dezimalpunkten nicht richtig analysieren (es sei denn, sie stehen in Klammern).

Jede Einsicht wäre dankbar.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage