需要使用正则表达式从字符串中的十进制数中删除尾随0

时间:2016-06-17 09:00:08

标签: java regex

这是我的正则表达式:

((((?<=(\d\.)(([1-9]))))|((?<=\d)\.[0])))((0)+) 

这是我的描述:

af 0.044 00.22 44.3500,44.334000,0.5000,1.750,1.9000,0.1480,10.2500,0.7480",19.00 MM,62.00MM,12MM,12.0000MM,DRILL BIT,0.040',1.00 IN MINI BEND RADIUS|0.3120IN TIP DIA|36.00 IN LG,45MM,45.0000MM,30MM,30.0000MM,40MM,40.0000MM,40.00 15.20,40.00,15.20000:14.00,40.00;15.20000*14.00X40.00/15.20000(14.00),40.00\15.20000{14.00},40.00|15.20000[14.00],40.00?15.20000%14.00,15.20000{14.00},40.00|15.20000,15.20000%14.00, 345.00 354.34500aa 354.aa 354. ABC.000 17.0

根据要求,它应该从描述中删除尾随的0。上面的正则表达式是删除零但在某些条件下失败。就像它失败了,如果值是0.040,任何人都可以建议我一个更好的正则表达式,它将满足所有条件。

2 个答案:

答案 0 :(得分:1)

s = s.replaceAll("(\\d\\.\\d*[1-9])0+\\b", "$1")
     .replaceAll("(\\d)\\.0+\\b", "$1");

对于两种情况1.034000至1.034和1.000

答案 1 :(得分:1)

根据您评论的预期结果,您只想从以它们结尾的小数中删除.0。 在这种情况下,这应该有效:

s = s.replaceAll("([0-9])+[.][0](?![0-9])", "$1");

因此:123.0变为123

通过0清洁再做一点。 一些懒惰的匹配和负面的前瞻可以完成这项工作。

0*([0-9]+[.][0-9][0-9]*?)0+(?![0-9])

对于此测试示例:

String s = "0.010 00.20200,003.30330;10044.04400M,5.0";
s = s.replaceAll("0*([0-9]+[.][0-9][0-9]*?)0+(?![0-9])", "$1");

将返回:

0.01 0.202,3.3033;10044.044M,5.0