2016-04-04 100 views
0

我想分析分號分隔的字符串,有或結尾沒有分號Java正則表達式匹配器匹配。 (點),即使它不是在模式

我也正則表達式(\s*\w+)(\s*;)*我解釋爲匹配:

0 ..n空格,後跟1..n個字符,後跟0..n個以分號結尾的空格。

我的問題是,如果出現'。',我會得到「錯誤匹配」。在輸入字符串 實施例:

0000.274283;518600.00-F10W; 

代替預期 '0000.274283;'我得到'0000'。

我錯過了什麼?

+0

\ w與點字符不匹配。它匹配字母數字字符和下劃線(_)。 –

+0

你確實看到了第二個捕獲組後面的最後一個'*'?第一個捕獲組匹配「0000」,第二個捕獲組匹配0次。 – dhke

回答

0

\ w匹配任何單詞字符。因此,您匹配0-n個空格後跟1個或多個字母,數字或下劃線。自'。'以來不包括在內,你的正則表達式不會與'。'匹配。因此,爲什麼你只能得到0000而不是0000.274283

+0

我在這裏試圖寫一個正則表達式來解析這個字符串:「0000.274283; 518600.00-F10W; 0274283; 04.09.2014; 03.09.2017; 0000274118; 000110; 13477」我知道我可以使用split,但是我需要它是正則表達式(其他要求)。有什麼建議麼 ? –

+0

如果您需要匹配的某些數字可以有'。'在裏面你可以用'?'與'。'進行匹配。可選的。 例如,如果我想匹配可能是8位數字(即1234.1234或12341234)的數字,我可以匹配\ d {4} \。?\ d {4} – scoots

0

[^;]+匹配除分號之外的所有內容,所以也許你可以用分號分隔給定的字符串。