使用 0 值指数或尾随 0 使科学计数法无效

Posted

技术标签:

【中文标题】使用 0 值指数或尾随 0 使科学计数法无效【英文标题】:Invalidate scientific notation with 0 value exponent or trailing 0s 【发布时间】:2014-06-14 02:03:36 【问题描述】:

我正在使用this solution 正则表达式科学记数法:

/-?(?:0|[1-9]\d*)(?:\.\d*)?(?:[eE][+\-]?\d+)?/

我想添加少量的空间节约,所以我还想禁止小数点后的尾随零和零值作为指数。

我认为在\.\d 之后添加[1-9] 将强制没有尾随零,但我认为它也会在. 之后强制至少两个数字,这是不可取的。

我不具备正确修改此正则表达式的必要经验。

如何实现我的意图?

【问题讨论】:

Gracchus,如果你还没有尝试过正则表达式英雄,你可能想试一试。它允许人们对正则表达式语句进行试验,并用各种数据对它们进行无止境的测试。 RegexHero.net. @Gracchus: regex101.com 可能会有所帮助,然后(在线工作,无需安装) @Gracchus:如果您正在寻找交互式教程,请尝试 regexone.com 要获得良好的参考,请使用此站点:regular-expressions.info 要获得书籍,请尝试 Jeffrey Friedl 的 Mastering Regular Expressions。 【参考方案1】:

你可以做这个简单的改变:

/-?(?:0|[1-9]\d*)(?:\.\d*[1-9])?(?:[eE][+-]?[1-9]\d*)?/

请注意,[1-9]\d* 将禁止带前导零的指数。

【讨论】:

@Gracchus:是的,但是由于前导零的指数被排除在外,因此也排除了 0 值的指数。 @Gracchus:但是,如果您需要前导零的容差,您可以使用:[eE][+-]?0*[1-9]\d*【参考方案2】:

我认为在\.\d 之后添加[1-9] 将不强制使用尾随零,但我认为它也会在. 之后强制至少两个数字

No \d 实际上是 \d*,这意味着它只会强制执行一个 [1-9](前面是 none 或 many \ds)。所以

/-?(?:0|[1-9]\d*)(?:\.\d*[1-9])?(?:[eE][+\-]?\d+)?/
/-?(?:0|[1-9]\d*)(?:\.\d*[1-9])?(?:[eE][+\-]?[1-9]\d*)?/ # no (leading) zero exponent

工作。但是,如果小数部分明显,它会在点后强制一位数字。

【讨论】:

以上是关于使用 0 值指数或尾随 0 使科学计数法无效的主要内容,如果未能解决你的问题,请参考以下文章

没有科学记数法的回声数,同时去除尾随零和小数点

科学计数法1

1024 科学计数法

1024 科学计数法

Python中科学计数法中的指数数字

flutter - 将数字转换为科学记数法并获得指数 flutter