Java 带有捕获组的正则表达式,用于解析两个实数的范围
我需要一个正则表达式来正确解析两个实数(无符号)的范围,并用连字符表示 有效输入: 1-3 3.14-7.50 0-4.01 它是Android上的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 =
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+)?)");