Java 正则表达式混合分数

Java 正则表达式混合分数,java,regex,fractions,Java,Regex,Fractions,您好,我正在尝试从字符串中提取混合数。我的模式表达正确吗? 从示例中,我希望输出为“1 1/2” 我一直有例外 线程“main”java.lang.IllegalStateException中的异常:未找到匹配项 位于java.util.regex.Matcher.group(未知源) 在mixednumbergex.main(mixednumbergex.java:15) ` 您可以简化一点正则表达式,并通过以下方式执行: public class MixedNumberRegex {

您好,我正在尝试从字符串中提取混合数。我的模式表达正确吗? 从示例中,我希望输出为“1 1/2”

我一直有例外

线程“main”java.lang.IllegalStateException中的异常:未找到匹配项 位于java.util.regex.Matcher.group(未知源) 在mixednumbergex.main(mixednumbergex.java:15) `


您可以简化一点正则表达式,并通过以下方式执行:

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/2
1/2


如果只想捕获
1 1/2
,请使用模式:

    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 1/2+1/4”或“1/4+1 1/2”,也可以是一个等式中的多个混合数字,例如:“1 1 1/2+1/4-1 1/8”我想捕捉方程中的所有混合数。非常感谢它的工作。但是模式也会检测到1/2,这是一个正态分数。有没有办法只捕捉混合数?谢谢Szymon。你是个天才。非常感谢你的帮助。:)
Pattern FRACTION_PATTERN = Pattern.compile("\\d+\\s+\\d/\\d");