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



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

有效输入:

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)

我真的看不出这个表达有什么问题。

我将特别希望解释它的问题是什么。允许在连字符周围使用可选空格的正则表达式也会特别好(我希望它以这种方式工作,但现在我放弃了它,因为我根本无法让它工作)。

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

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

此外,在调用方法之前,还需要调用matcher.find()matcher.matches().group(int)

最新更新