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

Posted

技术标签:

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

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

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

^\\d+(?:\\.\\d1,2)?$

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

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

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

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

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

【问题讨论】:

【参考方案1】:

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

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

Live demo

【讨论】:

【参考方案2】:

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

^(?:0\.(?:0[1-9]|[1-9]\d?)|[1-9]\d*(?:\.\d1,2)?)(?:e[+-]?\d+)?$

在哪里

(?:0\.(?:0[1-9]|[1-9]\d?) 匹配小于 1 且最多保留 2 位小数的正数 [1-9]\d*(?:\.\d1,2)? 匹配等于或大于 1 的正数,可选最多 2 位小数 (?:e[+-]?\d+)?可选地匹配科学记数法

注意事项:

不允许有前导零 不允许. 没有小数位(可以使用\.\d0,2 修复) 由于电子符号(例如 1e-3),可能有更多小数位 应使用 i-Modifier 您可能只想使用您的语言能力来解析和比较浮点值

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

【讨论】:

以上是关于正则表达式匹配数字的科学记数法但不匹配其他字母的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式匹配指定数据和字母

正则表达式(待补充)

ORACLE的正则表达式(摘自网上)

正则表达式:检测密码由6-20字母和数字组成

php正则匹配数字

正则表达式:要么只有数字或字母数字带' - '和'_'允许但不带数字' - '和' - '