2017-02-03 109 views
0

我正在尋找一個正則化十進制數的正則表達式。當我說正常化我的意思是刪除所有前導零和小數點後的所有尾隨零。規範化十進制數正則表達式

例如:

0.0 -> 0 
1.230 -> 1.23 
0-> 123 
012.30400 -> 12.304 
0102 --> 102" 

到目前爲止,我想出了這個

(< =,| ^?)(?:?[0 + - ] +(= 0 ?。(?:。,| \乙| $))| 0 +(= [1-9]))| .0+ \ C | \ B0 +(= \ d * \ b)| \乙|( ?< = [1-9])0 +(=,|?$)

爲0.1它返回0.1的唯一問題,否則它的工作原理

+0

見的可能解決方案[這裏](http://stackoverflow.com/a/35351336/3832970)。 –

+0

'[1-9] \ d *(\。\ d * [1-9])?'[近乎成功](https://regex101.com/r/nSwepA/1),但'0'失敗。 x'。 – Aaron

+0

「當我說正常化我的意思是刪除所有前導零」和「0.1的唯一問題它返回.1」是矛盾的。您*特別*請求刪除所有前導零,然後指出一個前導零被刪除的問題。你得到的一個答案會導致這個前導零被移除,另一個不會,所以這實際上造成了不必要的混淆。 – hvd

回答

0

如果這是每行一個進入,嘗試

^0*(\d+(?:\.(?:(?!0+$)\d)+)?) 

See it here at regex101

如果要掃描所有的一切,你可以嘗試

\b0*(\d+(?:\.(?:(?!0+\b)\d)+)?) 

See it here at regex101

他們都捕獲到組1

如果你想刪除一切,但數字的號碼,更換

^0*(\d+(?:\.(?:(?!0+$)\d)+)?).*$ 

與組1

Check it out here

0

一個簡單的交替應該足夠:

^0+|(\.[0-9]+)0+$ 

代用。將捕獲組1