首页 > 解决方案 > 使用正则表达式从浮点数中去除尾随零

问题描述

给定输入,例如:

123000
-123000
1.230000000
123.4000000
-123.4000000
123.0

是否有一个正则表达式将匹配非尾随零部分,相应地给出如下捕获?:

123000
-123000
1.23
123.4
-123.4
123.0

标签: regexfloating-pointpcrestrip

解决方案


一个可能的候选人是

(?!00+)([+-]?\d+(\.\d?)?)(0*[1-9])*

你可以在这个演示中测试。

第一组是负前瞻,防止选择仅由两个或多个零组成的匹配字符串(00000否则将匹配尾随字符串)

第二组匹配一个可选的符号,后跟一个或多个数字,可选地后跟一个文字点和一个可选的数字(小数点后的第一个数字可以为零,如您在示例中发布的那样),然后跟随一组由一组零分隔的集合中的 0 组或多组数字[1-9](这保证该数字以非零数字结尾)

最后,您需要获得第二组,它界定了您感兴趣的子字符串。有关详细信息,请参阅演示

更新

强制负前瞻位于左侧的非单词边界,它与链的最后一个零不匹配,因为新数字(连续数字必须是不同的词)导致这个新的正则表达式:

(?!\B00+)([+-]?\d+(\.\d?)?)(0*[1-9])*

可以在demo2中看到


推荐阅读