【问题标题】:Regex to match scientific notation of numbers but not other letters正则表达式匹配数字的科学记数法但不匹配其他字母
【发布时间】:2018-05-25 12:11:59
【问题描述】:

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

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

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

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

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

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

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

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

【问题讨论】:

    标签: regex numbers scientific-notation


    【解决方案1】:

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

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

    Live demo

    【讨论】:

      【解决方案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/

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-08-21
        • 2014-07-14
        • 2017-12-02
        • 1970-01-01
        • 2011-04-06
        • 1970-01-01
        相关资源
        最近更新 更多