这些案件的正则表达式是什么?

时间:2013-01-06 09:48:05

标签: objective-c ios regex

这些案件的正则表达式是什么:

29000.12345678900 ,预期结果 29000.123456789

29000.000 ,预期结果 29000

29000.00003400 ,预期结果 29000.000034

简而言之,如果在十进制后面再次找不到1-9,我想消除0点,我还想消除点(。),如果实际上这个数字可以被认为是整数。

我使用这个正则表达式

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

但它给了我这个结果:

来自 29123.6400

29123.6 ,4从那里消失。

当我单独测试正则表达式时,它完美运行,

.0*$ 29123.0000

给我 29123

0*$ 29123.642300

给我 29123.6423

我是否遗漏了合并正则表达式的内容?

4 个答案:

答案 0 :(得分:3)

如果你认为正则表达式是最好的方法,你可以使用这样的东西:

\.?0+$

适用于两种情况:

> '12300000.000001130000000'.replace(/\.?0+$/g, '')
"12300000.00000113"
> '12300000.000000000000'.replace(/\.?0+$/g, '')
"12300000"

答案 1 :(得分: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

解决了您的问题

试试here

答案 2 :(得分: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之间的数字,仅排除0eg. (2344)
  7. Regex

答案 3 :(得分: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'