3

这些情况的正则表达式是什么:

29000.12345678900,预期结果29000.123456789

29000.000 , 预期结果29000

29000.00003400,预期结果29000.000034

简而言之,如果在小数点后面没有再找到 1-9,我想消除 0 点,如果实际上可以将数字视为整数,我还想消除点 (.)。

我使用这个正则表达式

(?:.0*$|0*$)

但它给了我这个结果:

29123.6来自29123.6400, 4 从那里消失了。

当我单独测试正则表达式时,它工作得很好,

.0*$29123.0000给我29123

0*$29123.642300给我29123.6423

我错过了组合正则表达式的东西吗?

4

4 回答 4

3

如果您认为正则表达式是最好的方法,您可以使用以下内容:

\.?0+$

它适用于两种情况:

> '12300000.000001130000000'.replace(/\.?0+$/g, '')
"12300000.00000113"
> '12300000.000000000000'.replace(/\.?0+$/g, '')
"12300000"
于 2013-01-06T09:56:15.160 回答
3

你可以使用这个正则表达式

^\d+(\.\d*[1-9])?
-   -------------
|        |->this would match only if the digits after . end with [1-9] 
|
|->^ depicts the start of the string..it is necessary to match the pattern

解决你的问题

在这里试试

于 2013-01-06T10:01:55.257 回答
0

你只是想要这个:

^\d*(\.?\d*[1-9])?
  1. ^\d*这意味着第一组之前的一个或多个数字。
  2. ()描述匹配组中。
  3. \.?表示单个 DOT(.)可以存在但可选。eg. (.)
  4. \d*可以有一个或多个数字。eg. (1234)
  5. \.?\d*可以有一个 DOT 和一个或多个数字eg. (.123)
  6. [1-9]这仅包括从 1 到 9 的数字,仅不包括0.eg. (2344)

正则表达式

于 2013-01-06T10:11:45.923 回答
0

我不知道 Objective-C 是否支持类似以下构造的东西,但在 Python 中,您可以完全不用正则表达式,使用str.rstrip()

In [1]: def shorten_number(number):
   ...:     return number.rstrip('0').rstrip('.')

In [2]: shorten_number('29000.12345678900')
Out[2]: '29000.123456789'

In [3]: shorten_number('29000.000')
Out[3]: '29000' 
于 2013-01-06T10:56:36.307 回答