2017-05-24 18 views
0

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

有效输入:

1-3

3.14-7.50

0-4.01

它的Java在Android上。

我目前的做法:

它崩溃就试图检索最小值。

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

你需要让小数部分可选:

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

您还需要致电之前致电matcher.find()matcher.matches() 10方法。

+3

不,这没有关系,但肯定会是下一个问题。 –

+0

哦,是的,'find()'或者'matches()'需要在'.group()之前调用。“ – anubhava

+1

对!谢谢。谢谢@WiktorStribiżew –