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) `
答案 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/2
和1 1/2
。
如果您只想捕获1 1/2
,请使用pattern:
Pattern FRACTION_PATTERN = Pattern.compile("\\d+\\s+\\d/\\d");