我想写一个正则表达式来匹配所有正双精度数,小数点后最多2位数。
我的第一个方法是:
^\\d+(?:\\.\\d{1,2})?$
它适用于大多数情况,但不适用于科学记数法,例如10000000
写成1.0E7
时。
我找到了答案here,我根据自己的情况做了调整:
[\\s=]+([+]?(?:0|[1-9]\\d*)(?:\\.\\d*)?(?:[eE][+\\-]?\\d{1,2}))$
但现在它为很多“好”值返回false。
任何想法如何使它只匹配小数点后0到2位的正数值,还有数字的科学记数法?
答案 0 :(得分:2)
您从另一个答案中复制了确切的正则表达式,该答案要求更多要求,即匹配方程式。删除那些有点修改的你可以尝试:
^[+-]?\d+(?:\.\d*(?:[eE][+-]?\d+)?)?$
答案 1 :(得分:2)
假设零不是正数,则可以使用
^(?:0\.(?:0[1-9]|[1-9]\d?)|[1-9]\d*(?:\.\d{1,2})?)(?:e[+-]?\d+)?$
,其中
(?:0\.(?:0[1-9]|[1-9]\d?)
匹配小于1的正数,最多2位小数[1-9]\d*(?:\.\d{1,2})?
匹配等于或大于1的正数,可选最多2位小数(?:e[+-]?\d+)?
可选择匹配科学记数法注意事项:
.
,不允许小数点(可以使用\.\d{0,2}
)