我想構造一個正則表達式(對於Java)來截斷小數點後面的零。例如正則表達式截斷尾隨零
- 50.000→50
- 50.500→50.5
- 50.0500→50.05
- -5→-5
- 50→50
- 5.5→5.5
想法是以最簡潔的形式表示實數(或整數)。
下面是我建造什麼:
^(-?[.0-9]+?)\.?0+$
我使用$1
捕捉截斷數字字符串。
與上述模式的問題是,50被截斷至5。我需要一些方法來表達的0+
必須遵循.
(小數點)。
我試過使用負面後,但不能得到任何比賽。
我想構造一個正則表達式(對於Java)來截斷小數點後面的零。例如正則表達式截斷尾隨零
想法是以最簡潔的形式表示實數(或整數)。
下面是我建造什麼:
^(-?[.0-9]+?)\.?0+$
我使用$1
捕捉截斷數字字符串。
與上述模式的問題是,50被截斷至5。我需要一些方法來表達的0+
必須遵循.
(小數點)。
我試過使用負面後,但不能得到任何比賽。
最好的解決方案可能是使用內置的特定於語言的方法來執行該任務。
如果您不能使用它們,您可以使用
^(-?\d+)(?:\.0+|(\.\d*?)0+|\.+)?$
而且隨着$1$2
取代。
查看regex demo。相應地調整正則表達式。下面是解釋:
^
- 串(-?\d+)
-Group 1捕捉1個或0減去符號的開始,然後1個或多個數字(?:\.0+|(\.\d*?)0+|\.+)?
- 一個可選(匹配1或0次由於拖尾?
)非捕獲組匹配3個備選方案:
\.0+
- 一個小數點,接着用1+零(\.\d*?)0+
- 第2組捕獲點與任何0+數字,但儘可能少和匹配1+零\.+
- (可選分支,你可以刪除它,如果沒有必要) - 相匹配的尾隨點(S )$
- 字符串結尾。String s = "50.000\n50\n50.100\n50.040\n50.\n50.000\n50.500\n50\n-5";
System.out.println(s.replaceAll("(?m)^(-?\\d+)(?:\\.0+|(\\.\\d*?)0+|\\.+)?$", "$1$2"));
// => [50, 50, 50.1, 50.04, 50, 50, 50.5, 50, -5]
這裏是[更新的演示](https://regex101.com/r/nF6rY3/2)鏈接。 –
@WingPoon:如果輸入是'-5',你期望得到什麼?它裏面沒有小數部分。據我記得,你需要刪除*小數部分*尾隨零,或者你改變了主意,現在想匹配所有的尾部零? –
您必須將該要求添加到問題中。使用['^( - ?\ d +)(?:\。0+ |(\。\ d *?)0+ | \。+)?$'](https://regex101.com/r/wH5qA8/ 1)。你使用的是什麼方法/代碼? –
對於一般的正則表達式應該做的伎倆:
^\d+?0*\.??\d*?(?=0*?[^\d]*$)
您可以替換無論你的邊界應該是插入符號和美元符號。這些可以取代你期望的數字。
基本上:
/d+?
非貪婪匹配用於任何數目的(至少需要1號開始比賽)爲一個十進制
\.*??
可選匹配。傾向於匹配0次出現
\d*? (?=0*?[^\d]*$)
- 非貪婪匹配一個數字,而是將在其通過非數字
編輯進行0止損:我才意識到原來的表達也修剪整數最後爲零,這應該工作。我添加了選項0 match to catch that
'^( - ?[\。0-9] +?)(\。0 +)?'' –
像這樣:[regex 101](https:// regex101 .com/r/aJ5kC1/1)? –
您正在使用哪種語言? –