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

Java 带有捕获组的正则表达式,用于解析两个实数的范围,java,android,regex,regex-group,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 =

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

有效输入:

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");
我真的看不出这个表达有什么不对


我尤其希望您能解释一下它的问题所在。允许在连字符周围使用可选空格的正则表达式也会非常好(我希望它能这样工作,但我暂时放弃了它,因为我根本无法让它工作)。

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

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

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

不,这不相关,但肯定是下一个问题。哦,是的,
find()
matcher.matches()
需要在
.group()
之前调用!谢谢也谢谢你@WiktorStribiżew
Pattern pattern = Pattern.compile(
   "(?<Minimum>\\d+(?:\\.\\d+)?)-(?<Maximum>\\d+(?:\\.\\d+)?)");