2012-07-08 100 views
1

我想查找字符串中的所有負浮點數並將它們存儲在數組中。我認爲我的正則表達式是正確的,但是我的方法有些問題。如何使用正則表達式去除字符串

Pattern pattern = Pattern.compile("[-]?[0-9]*[.][0-9]+$");  
String[] results = pattern.split("|AAA--A A05_#A| |-999.999| |-55.7|"); 
+1

不是答案,但請注意,它(正則表達式)不會與[科學記數法](http://en.wikipedia.org/wiki/Scientific_notation)相匹配,因爲您的浮點數(通常可接受並被識別爲浮點數數字) - 它可能是你想要的。 – amit 2012-07-08 20:01:09

+0

http://gskinner.com/RegExr/是一個很好的網站,可以幫助您構建正則表達式 – Zeveso 2012-07-08 20:05:17

回答

6

您的正則表達式將匹配錨定到字符串的末尾,這不是您想要的。

同樣,Pattern.split不會做你想做的。下面是一些示例代碼,讓你去:

Pattern pattern = Pattern.compile("[-]?[0-9]*[.][0-9]+"); 
String text = "|AAA--A A05_#A| |-999.999| |-55.7|"; 
Matcher matcher = pattern.matcher(text); 
while (matcher.find()) { 
    System.out.println(matcher.group()); 
} 

此打印:

-999.999 
-55.7 

很明顯,你可以添加到列表或while循環中類似的東西。我不知道任何返回所有匹配集合的方法,但是您可以根據上面的代碼輕鬆編寫一個實用程序方法來執行此操作。

編輯:正如在評論中指出,如果你只想找到負值,則-不宜選用(它並不需要在一組,或者 - 只是-?會被罰款)。

+0

爲什麼「 - 」是可選的?這將匹配正數,她說她需要消極。 – Ixx 2012-07-08 20:01:21

+0

@Ixx:我不知道,說實話 - 這是在原始的正則表達式中,我只是想調整它足以讓它開始工作。請注意,在編輯。 – 2012-07-08 20:05:35

+0

@Jon Skeet謝謝,我終於做到了。其實我也需要正則表達式來檢測非小數點,所以我讓小數部分是可選的。它現在很好用:) – sfrj 2012-07-11 21:26:17

相關問題