带有捕获组的正则表达式,用于解析两个实数的范围

时间:2017-05-24 21:46:19

标签: java android regex regex-group

我需要一个正则表达式来正确解析两个实数(无符号)的范围,用连字符表示。

有效输入:

  

1-3

     

3.14-7.50

     

0-4.01

这是Android上的Java。

我目前的做法:

Pattern pattern = Pattern.compile("(?<Minimum>\\d+(\\.\\d+))-(?<Maximum>\\d+(\\.\\d+))");
Matcher matcher = pattern.matcher("3.14-5.2");
String min = matcher.group("Minimum");
String max = matcher.group("Maximum");

尝试检索最小值时崩溃。

java.lang.IllegalStateException: No match found
    at java.util.regex.Matcher.getMatchedGroupIndex(Matcher.java:1314)
    at java.util.regex.Matcher.group(Matcher.java:572)

我无法真正看出表达式出了什么问题。

我特别感谢有关它的问题的解释。一个正则表达式允许连字符周围的可选空白区域也是非常好的(我希望它以这种方式工作但我暂时放弃它,因为我根本无法使它工作)。

1 个答案:

答案 0 :(得分:1)

您需要将小数部分设为可选:

Pattern pattern = Pattern.compile(
   "(?<Minimum>\\d+(?:\\.\\d+)?)-(?<Maximum>\\d+(?:\\.\\d+)?)");
    ?之后
  • (?:\\.\\d+)会使该群组成为可选匹配
  • 最好使用?:使其成为非捕获组

此外,您需要在致电matcher.find()方法之前致电matcher.matches().group(int)