这是我的正则表达式:
((((?<=(\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
,任何人都可以建议我一个更好的正则表达式,它将满足所有条件。
答案 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