gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 13:05:01 24 4
gpt4 key购买 nike

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

有效输入:

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+) 之后的
  • ? 将使该组成为可选匹配
  • 最好使用 ?: 使其成为非捕获组

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

关于java - 带有捕获组的正则表达式,用于解析两个实数的范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44168993/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com