2017-04-14 30 views
2

我有一個正則表達式Java的正則表達式匹配不組預期

.*?(\\d+.*?\\d*).*?-.*?(\\d+.*?\\d*).*? 

我想匹配的是包含一個數值後接任意字符串「 - 」和另一個號碼。任何字符串都可以在兩者之間。

此外,我想能夠使用Java Matcher類的組功能提取數字。

Pattern pattern = Pattern.compile(".*?(\\d+.*?\\d*).*?-.*?(\\d+.*?\\d*).*?"); 
Matcher matcher = pattern.matcher("13.9 mp - 14.9 mp"); 
matcher.matches(); 

我期待這樣的結果:

matcher.group(1) // this should be 13.9 but it is 13 instead 
matcher.group(2) // this should be 14.9 but it is 14 instead 

任何想法,我缺少什麼?

+1

躲避'\ d +。* \ d *'或更好的點,使用'\ d +(?:\。\ d +)?' –

回答

2

您目前的模式有幾個問題。正如其他人所指出的,如果你打算讓它們成爲字面點,你的點應該用兩個反斜槓逃脫。我想你想的圖案用來匹配數這可能會或可能不會有一個小數部分是這樣的:

(\\d+(?:\\.\\d+)?) 

這符合以下幾點:

\\d+   one or more numbers 
(?:\\.\\d+)? followed by a decimal point and one or more numbers 
       this entire quantity being optional 

全碼:

Pattern pattern = Pattern.compile(".*?(\\d+(?:\\.\\d+)?).*?-.*?(\\d+(?:\\.\\d+)?).*?"); 
Matcher matcher = pattern.matcher("13.9 mp - 14.9 mp"); 
while (matcher.find()) { 
    System.out.println(matcher.group(1)); 
    System.out.println(matcher.group(2)); 
} 

輸出:

13.9 
14.9 
0
.*?(\d+\.*\d*).*?-.*?(\d+\.*\d*).*? 

。在'\ d +'和'\ d'之間的正則表達式應該改爲\。

+0

這將匹配以數字結尾的句子。看看[這裏](https://regex101.com/r/9PHnDn/1)。 –

+0

正則表達式是瓊斯的,我只是修改它爲他想要的matche值。也許這就是他想要的。 –