用于解析复杂数字行的正则表达式

时间:2016-04-27 08:32:06

标签: python regex numbers

我试图解析一行看起来像这样的数字

  

38.97 -99.63 $ 0.6512.00 1 0 185.00 0 -126.00 1.750 4.87

我想在点后提取所有数字到2位数的精度。我还想提取缺少空格的数字" 0.6512.00"

我想出了这个

  

( - (:????\ d +(:\ d {0,2})))

但问题是,它将1.750分为1.75和0

有没有人知道如何解决这个问题? 感谢

3 个答案:

答案 0 :(得分:0)

您可以使用

(-?\b(?:\d+\.\d{0,2}(?!0*[1-9])|(?<!\d\.)\d+(?!\.\d)))0*\b

请参阅this regex demo

重点是使用2个替代方案,一个用于浮点值 - \b(?:\d+(?:\.\d{0,2})(?!0*[1-9]) - 小数部分有2位数,另一个用于(?<!\d\.)\d+(?!\.\d) - 用于匹配整数值。尾随0*将匹配浮点数,但不会被捕获。 使用第1组值

答案 1 :(得分:0)

试试这个正则表达式

\d+\b\.\b(?:(?!\.| )[0-9]){2}

输出将是 enter image description here

答案 2 :(得分:0)

这是我的两个便士价值:

[-+]?\d+(?:(?:\.\d+)(?![.\d])|(?:\.\d{1,2}))?

它允许一个可选的符号后跟一系列数字,然后可选地后跟 -

一个点(.)和一个数字范围,以点结尾, ......

一个点和1或2位小数。

它通过对3+个十进制数进行四舍五入的加法(例外?)来填充所有条件,即将其留给数字解析器,因为1.750应舍入为1.75,并{{ 1}}应该转到1.758,并且正则表达式无法正确执行此操作;)。

Se it work here at regex101

此致

编辑略微简化正则表达式和说明