正则表达式匹配数字的科学计数法但不匹配其他字母

Regex to match scientific notation of numbers but not other letters

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

我的第一个方法是这样的:

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

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

我找到了答案 并根据我的情况对其进行了调整,结果:

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

但现在它 returns 对于很多 "good" 值都是错误的。

知道如何让它只匹配小数点后 0 到 2 位的正数值以及数字的科学记数法吗?

您从另一个要求更多要求(即匹配方程式)的答案中复制了准确​​的正则表达式。您可以尝试稍作修改删除那些:

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

Live demo

假设零不是正数,你可以使用

^(?: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/