正则表达式用小数提取多个数字
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
这样的数字,即没有包含整数部分的数字分组符号。
我有下面这组号码:
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
这样的数字,即没有包含整数部分的数字分组符号。