【问题标题】:Regular expression for floats with a fixed number of significant digits具有固定有效数字位数的浮点数的正则表达式
【发布时间】:2014-10-07 08:11:28
【问题描述】:

我正在尝试为具有固定最大(例如 4)个有效数字的浮点数找到正则表达式。

这应该匹配:

- 123.4
- 12.34
- 1.2
- 223
- 0.1234
- 0.000001234

问题是点前后的非零数总共最多为 4 个。

我尝试拆分问题并找到解决方案:

- 0.xxxx
- 0.000xxx
- xxxx

但是对于在点之前和之后找到有效数字的情况,我没有找到解决方案。 (examples: 1.23 2.345)


更新: 我想我找到了解决方案:

^(?!(?:.*[1-9](\.?[0-9]){4,}))([-+]?\d+\.?\d*?)$

【问题讨论】:

  • - 是输入的一部分吗?点是必要的吗?
  • - 不是输入的一部分。没必要
  • 您要允许.23 还是65.
  • 是的,我允许 0.23 和 65。如果这样可以让问题变得更容易。
  • /([1-9]+([0-9]+)?)?\.(([1-9])|(0+[1-9]+))/g 将匹配所有有效数字(不回答您的问题,具体来说,只是认为它可能会有所帮助)

标签: regex significant-digits


【解决方案1】:
^(?!(?:.*?[1-9]){5,})([-+]?\s*\d+\.?\d*?)$

试试这个。这将只匹配 4 个或更少的有效数字。不要忘记放置标志 gm。查看演示。

http://regex101.com/r/hQ1rP0/28

【讨论】:

  • 谢谢!这不完全是我需要的,因为例如 122.04 也匹配但有 5 个有效数字。但是使用负前瞻是一个很好的提示!
【解决方案2】:

我想你想要这样的东西,

^0*(?:[1-9]\d{0,3})?(?:\.0*(?:[1-9]\d{0,3})?)?$

DEMO

【讨论】:

  • 好的!但 0000.0000000012340 也匹配但有 5 个符号。数字
  • 对不起,我不知道你是什么意思。你想允许100000.00001
  • 抱歉,我不允许使用该数字,因为在第一个非零([1-9],第一个数字)之后打印了超过 4 个数字 [0-9]。
猜你喜欢
  • 2022-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-20
  • 1970-01-01
  • 2020-02-25
  • 1970-01-01
相关资源
最近更新 更多