2013-12-22 109 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