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

Posted

技术标签:

【中文标题】正则表达式提取带小数的多个数字【英文标题】:Regex to extract multiple numbers with decimal 【发布时间】:2022-01-18 02:12:40 【问题描述】:

我有以下一组数字

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

预期结果

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

2,836,433.18
2,201,355.64
22.39

尝试

我尝试了(\d+)(?:\.(\d1,2))? 正则表达式,但这只会提取到第一个小数点的数字,即我只得到2,836,433.18

问题

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

【问题讨论】:

【参考方案1】:

你可以使用

re.findall(r'\d1,3(?:,\d3)*(?:\.\d1,2)?', text)
re.findall(r'(?:\d1,3(?:,\d3)*|\d+)(?:\.\d1,2)?', text)

参见regex demo #1 和regex demo #2。

详情

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

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

【讨论】:

亲爱的Wiktor,请问这里使用非捕获组的目的是什么? @AnoushiravanR 由于re.findall 返回(列表)元组,如果正则表达式模式包含捕获组(组),非捕获组是解决此问题的常用方法。见re.findall behaves weird。你可能也对R's equivalent of Python's re.findall感兴趣。

以上是关于正则表达式提取带小数的多个数字的主要内容,如果未能解决你的问题,请参考以下文章

java正则表达式匹配所有数字+匹配纯数字+匹配带小数点数字

正则表达式验证文本框只能输入数字和小数点

正则表达式验证文本框只能输入数字和小数点

从字符串中提取分数、小数和数字的正则表达式[关闭]

正则表达式只接受带小数点和小数点的数字输入

正则表达式