2016-06-17 51 views
1

這是我的正則表達式來移除小數尾0的字符串:需要使用正則表達式

((((?<=(\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,任何人都可以建議我一個更好的正則表達式,可以滿足所有的條件。

+1

什麼是所需的輸出? – Sobrique

+0

嘗試['replaceAll(「\\。?0 +(?![0-9。])」,「」)'](https://regex101.com/r/vC8vK6/1) –

+0

我需要構建一個正則表達式,它應該能夠刪除所有在描述中存在的所有尾部0 –

回答

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

對於這兩種情況1.034000至1.034和1.000

1

根據您的意見了預期的效果,你只是想從他們手中終結小數刪除.0。 在這種情況下,這應該工作:

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

因此:123.0成爲123

做一點更thourough 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