正则表达式用小数提取多个数字

Regex to extract multiple numbers with decimal

我有下面这组号码:

SalesCost% Margin
2,836,433.182,201,355.6422.39

预期结果

我想将其分开并提取数字,以便得到如下所示的结果:

2,836,433.18
2,201,355.64
22.39

尝试

我尝试了 (\d+)(?:\.(\d{1,2}))? 正则表达式,但这只会提取数字直到第一位小数,即我只得到 2,836,433.18.

问题

有没有一种方法可以使用正则表达式(或通过 Python 以某种方式)提取数字以获得上面显示的结果?

你可以使用

re.findall(r'\d{1,3}(?:,\d{3})*(?:\.\d{1,2})?', text)
re.findall(r'(?:\d{1,3}(?:,\d{3})*|\d+)(?:\.\d{1,2})?', text)

参见regex demo #1 and regex demo #2

详情:

  • \d{1,3} - 一位、两位或三位数字
  • (?:,\d{3})* - 逗号和三个数字出现零次或多次
  • (?:\.\d{1,2})? - . 和一个或两个数字的可选序列。

(?:\d{1,3}(?:,\d{3})*|\d+)(?:\.\d{1,2})? 变体支持像 123456.12 这样的数字,即没有包含整数部分的数字分组符号。