2013-12-22 75 views
2
public class MixedNumberRegex { 

    public static void main(String[] args) { 

     Pattern FRACTION_PATTERN = Pattern.compile("(?:(\\d+)\\s+)?(\\d+)/(\\d+)"); 

     Matcher m = FRACTION_PATTERN.matcher("1/2 + 1 1/2"); 

     System.out.print(m.group(1)); 
    } 
} 

嗨,我試圖從字符串中提取出混合數字。我的模式表達是否正確? 從這個例子中,我想輸出是「1 1/2」。正則表達式混合分數

我不斷收到異常

異常線程 「main」 java.lang.IllegalStateException:沒有找到匹配 在java.util.regex.Matcher.group(來源不明) 在MixedNumberRegex.main (MixedNumberRegex.java:15) `

回答

1

您可以簡化您的正則表達式了一下,這樣來做:

Pattern FRACTION_PATTERN = Pattern.compile("(?:\\d+\\s+)?\\d/\\d"); 

    Matcher m = FRACTION_PATTERN.matcher("1/2 + 1 1/2"); 

    while (m.find()) { 
     String found = m.group(); 
    } 

它會發現1/21 1/2


如果你想捕捉只有1 1/2,使用模式:

Pattern FRACTION_PATTERN = Pattern.compile("\\d+\\s+\\d/\\d"); 
+0

我仍然得到了沒有找到匹配的異常改變,以您的示例模板後。 ( – gonggong

+0

)你是否總想捕獲第二組數字? – Szymon

+0

不是真的,因爲混合數字的表達式可以出現在任何地方,例如:「1 1/2 + 1/4」或「1/4 + 1 1/2「,或者它也可以是一個等式中的多個混合數字,例如: 」1 1/2 + 1/4 - 1 1/8「 我想捕獲等式中的所有混合數字。 – gonggong