2016-08-20 70 views
-1

我有這種形式[3 4.0:ad}一些字符串,我需要替換所有的空格和數字,但.(即需要解析解正確浮動)正則表達式路口排除字符將無法正常工作

,所以我有寫這個正則表達式

\D*!.|\s+ 

但不工作,我不明白我已經使用

\D*選擇非數字字符

正確的語法

!.排除.從選擇

|\s+選擇所有空白

如果我刪除!.工作這麼東西在我使用的是錯誤的路交叉口。

有什麼建議嗎?

+0

只是好奇,你在哪裏得到的想法'!'是特殊的?這是來自另一個正則表達式的語法,還是因爲Java語言中的否定或不等號運算符? – erickson

回答

1

您可以使用一個否定的字符類是這樣的:

str = str.replaceAll("[^\\d.]+", ""); 

[^\\d.]將匹配不是數字,不是一個DOT任何字符。

RegEx Demo

順便說一句\D還包括空格,這樣既不必在一個正則表達式來提供。

+0

感謝您的回答,無論如何,這將是很好的學習如何正確使用交叉點從選擇中排除一個字符。你能告訴我適合我的方法嗎? – AndreaF

+0

您可以使用負面預測:['str = str.replaceAll(「(?:(?!\\。)\\ D)+」,「」);'](https://regex101.com/ r/oL2iC9/2)或簡單地說:'str = str.replaceAll(「(?!\\。)\\ D」,「」);' – anubhava

+1

好的再次感謝 – AndreaF

1

,因爲它說here,Java類路口
是東西在class1的是在Class2中的子集。

相當簡單的概念,但使用可能會很棘手。最終,編譯器會將其解析爲單個類,因此如果結果短而明顯,那麼讀取效果會更好。

例子:

不是數字\D
不點[^.]

要匹配的空白,這是不位,因此沒有必要擔心
有關部分。

因此交集[\D&&[^.]]
它讀取作爲未位數不光點顯示

翻譯是[^\d.]這就是編譯器解決它的問題。

當您想要排除的字符範圍內有很多空洞時,真正的交集功能就會出現在
之內。

例如,所有的信件除了元音[a-z&&[^aeiou]]