2012-04-20 88 views
0

我想解析字符串這樣Java的正則表達式混亂

0.1142  0.0000  0.0000  0.0004  0.0000  0.0000 2299/2299  MakeRequest [23] 

我希望得到醇從這個字符串雙打。我正在使用下一個模式

.+ ([0-9\\.]+) [\\p{Space}]+ ([0-9\\.]+) [\\p{Space}]+ ([0-9\\.]+) [\\p{Space}]+ ([0-9\\.]+) [\\p{Space}]+ ([0-9\\.]+) [\\p{Space}]+ ([0-9\\.]+) [\\p{Space}]+ ([0-9\\/])+ [\\p{Space}] "\\.(MakeRequest) .+ 

而且這個字符串解析得很好。
但我不能解析下一個字符串!

20.1600  0.0001  0.0000  0.0053  0.0001  0.0000 383248/383248  MakeRequest [22] 

這個字符串非常相似!但首先被解析,第二不:-(

更新 輕鬆模式

.+ ([0-9\\.]+) .+ ([0-9\\.]+) .+([0-9\\.]+) .+ ([0-9\\.]+) .+ ([0-9\\.]+) .+ ([0-9\\.]+) .+ ([0-9\\/])+ .+\\.(MakeRequest) .+ 

不要太工作

我使用

java.util.regex.Pattern 

java.util.regex.Matcher 
+0

是否有應該是最後兩個分組之間的兩個「+」符號? '[\\ p {Space}] + +「\\。(MakeRequest)。+'? – 2012-04-20 13:06:42

+0

這是我的錯字... – Ilya 2012-04-20 13:09:20

回答

4

([0-9 \。] +)。+([0-9 \ /)+

相配SPACE,一個或多個字符,SPACE(總的3個字符)

第二個字符串只有2個空格。

0.0000383248分之383248

+0

之間的數字,它是失敗的地方(沒有檢查它是否失敗其他人也一樣) – 2012-04-20 13:09:38

+0

是的,這很有幫助 – Ilya 2012-04-20 13:11:21

2

是什麼毛病像以下代碼:

final Matcher m = Pattern.compile("\\d+\\.\\d+").matcher(s); // s is your line 
    while (m.find()) System.out.println(Double.parseDouble(m.group())); 
1

這是模式讓所有雙打

[0-9]*\.[0-9]*