我需要编写一些正则表达式,以去掉小数点后面的尾随零。所使用的语言是Actionscript 3。因此,我想要编写:
var result:String = theStringOfTheNumber.replace( [ the regex ], "" );
例如:
3.04000
将变为 3.04
0.456000
将变为 0.456
等等。
我花了一些时间浏览各种正则表达式网站,发现这比我最初想象的要难解决。
我需要编写一些正则表达式,以去掉小数点后面的尾随零。所使用的语言是Actionscript 3。因此,我想要编写:
var result:String = theStringOfTheNumber.replace( [ the regex ], "" );
例如:
3.04000
将变为 3.04
0.456000
将变为 0.456
等等。
我花了一些时间浏览各种正则表达式网站,发现这比我最初想象的要难解决。
正则表达式:
^(\d+\.\d*?[1-9])0+$
或者
(\.\d*?[1-9])0+$
$1
代码:
var result:String = theStringOfTheNumber.replace(/(\.\d*?[1-9])0+$/g, "$1" );
^(\d*\.\d*?[1-9])0+$
- Avinash Raj$1
替换匹配的字符,在上面链接的底部查看替换。您可以通过replace函数仅去除尾随零。 - Avinash Raj^([\d,]+)$|^([\d,]+)\.0*$|^([\d,]+\.[0-9]*?)0*$
s.replace(/^([\d,]+)$|^([\d,]+)\.0*$|^([\d,]+\.[0-9]*?)0*$/, "$1$2$3");
这将会发生变化。
1.10000 => 1.1
1.100100 => 1.1001
1.000 => 1
1 >= 1
[0-9]
)。我认为它应该是 ^([\d,]+)$|^([\d,]+)\.0*$|^([\d,]+\.[1-9]*?)0*$
。 - Elias"纬度":19.4225447900000000,"经度":-99.2162050100000000
。 - Paul Vargas0+
改成 00+
。 - Jonny 51.000000
),或者使用了一个回顾函数(不幸的是,这个实现不支持)。因此,我修改了现有的答案。
^-?\d+(\.\d*[1-9])?
- 演示(查看匹配)。这对于文本中的数字(如句子)将无效。\1
或$1
)使用(^-?\d+\.\d*[1-9])(0+$)|(\.0+$)
- 演示(请参见替换)。如果删除^
和$
,则该方法将适用于文本中的数字(如句子)。\.
(不需要斜杠),但我建议不要在此类正则表达式中支持多个分隔符格式(例如(\.|,)
)。内部格式通常使用一个特定的分隔符,如1.135644131
中的。
(无需检查其他潜在分隔符),而外部格式则倾向于使用两个分隔符(一个用于小数,一个用于千位,如1.123,541,921
),这将使您的正则表达式不可靠。-?
以支持负数,演示中没有。([0-9]*[.]?([0-9]*[1-9]|[0]?))[0]*
[0]*([0-9]*[.]?([0-9]*[1-9]|[0]?))[0]*
我测试了排名靠前的几个答案:
^(\d+\.\d*?[1-9])0+$
(\.\d*?[1-9])0+$
(\.\d+?)0+\b
所有这些方法都无法处理小数点后面全是零的情况,比如 45.000
或者 450.000
修改后的版本可以匹配到这种情况: (\.\d*?[1-9]|)\.?0+$
还需要将其替换为 '$1',如下所示:
preg_replace('/(\.\d*?[1-9]|)\.?0+$/', '$1', $value);
如果你的正则表达式引擎不支持“lookaround”功能,那么你可以使用这种简单的方法:
fn:replace("12300400", "([^0])0*$", "$1")
^(?!0*(\.0+)?$)(\d+|\d*\.\d+)$
虽然我来晚了,但这是我的解决方案:
(((?<=(\.|,)\d*?[1-9])0+$)|(\.|,)0+$)
我的正则表达式只匹配尾随的0,这样就可以很容易地进行.replaceAll(..)
类型的函数。
分解一下,第一部分:((?<=(\.|,)\d*?[1-9])0+$)
(?<=(\.|,)
:一个积极的回溯。小数必须包含一个。
或一个,
(在某些国家中,逗号被用作小数点)。但由于它是后向查找,因此不包括在匹配的文本中,但仍必须存在。\d*?
:懒惰地匹配任意数量的数字[1-9]
:匹配一个单个的非零字符(这将是尾随0之前的最后一个数字)0+$
:匹配在最后一个非零数字和行结尾之间发生的1个或多个0
。这对于尾随的0不是立即开始的情况非常有效,例如1.0
或5.000
。第二部分修复了这个问题:(\.|,)0+$
:
(\.|,)
:匹配一个.
或,
,并将其包含在匹配的文本中。0+$
:匹配小数点和行尾之间的1个或多个0
。示例:
1.0
变成 1
5.0000
变成 5
5.02394900022000
变成 5.02394900022