正则表达式混合分数

时间:2013-12-22 07:54:16

标签: java regex fractions

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 个答案:

答案 0 :(得分: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:

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