我试图解析一行看起来像这样的数字
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
有没有人知道如何解决这个问题? 感谢
答案 0 :(得分:0)
您可以使用
(-?\b(?:\d+\.\d{0,2}(?!0*[1-9])|(?<!\d\.)\d+(?!\.\d)))0*\b
重点是使用2个替代方案,一个用于浮点值 - \b(?:\d+(?:\.\d{0,2})(?!0*[1-9])
- 小数部分有2位数,另一个用于(?<!\d\.)\d+(?!\.\d)
- 用于匹配整数值。尾随0*
将匹配浮点数,但不会被捕获。 使用第1组值。
答案 1 :(得分:0)
答案 2 :(得分:0)
这是我的两个便士价值:
[-+]?\d+(?:(?:\.\d+)(?![.\d])|(?:\.\d{1,2}))?
它允许一个可选的符号后跟一系列数字,然后可选地后跟 -
一个点(.
)和一个数字范围,不以点结尾,或 ......
一个点和1或2位小数。
它通过对3+个十进制数进行四舍五入的加法(例外?)来填充所有条件,即将其留给数字解析器,因为1.750
应舍入为1.75
,并{{ 1}}应该转到1.758
,并且正则表达式无法正确执行此操作;)。
此致
编辑略微简化正则表达式和说明