正则表达式匹配数字的科学记数法而不是其他字母

时间:2018-05-25 12:12:00

标签: regex numbers scientific-notation e

我想写一个正则表达式来匹配所有正双精度数,小数点后最多2位数。

我的第一个方法是:

^\\d+(?:\\.\\d{1,2})?$

它适用于大多数情况,但不适用于科学记数法,例如10000000写成1.0E7时。

我找到了答案here,我根据自己的情况做了调整:

[\\s=]+([+]?(?:0|[1-9]\\d*)(?:\\.\\d*)?(?:[eE][+\\-]?\\d{1,2}))$

但现在它为很多“好”值返回false。

任何想法如何使它只匹配小数点后0到2位的正数值,还有数字的科学记数法?

2 个答案:

答案 0 :(得分:2)

您从另一个答案中复制了确切的正则表达式,该答案要求更多要求,即匹配方程式。删除那些有点修改的你可以尝试:

^[+-]?\d+(?:\.\d*(?:[eE][+-]?\d+)?)?$

Live demo

答案 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}
  • 修复
  • 由于电子记数法(例如1e-3)
  • ,可能会有更多小数位
  • 应使用i-Modifier
  • 您可能只想使用您的语言能力来解析和比较浮动值

演示:https://regex101.com/r/ljOaIb/1/