【问题标题】:Kotlin Regex For GPA Not Matching [duplicate]GPA不匹配的Kotlin正则表达式[重复]
【发布时间】:2018-12-18 18:11:21
【问题描述】:

所以我做了一个正则表达式来测试有效的 GPA,例如 0.00 到 5.00,包括 0、4、3.55 等。无效的东西包括 6.0、3.555、0.000、11.11 等。在我拥有的多个网站上验证此正则表达式适用于这些情况。

(([0-5]\s)|([0-4]\.\d{0,2}\s))|[5]\.[0]{0,2}\s

然后我尝试使用 Java Regex 类在 Kotlin 中使用它,但我没有得到预期的结果,对于我的测试用例来说总是错误的。

带有“2.0”测试字符串的代码:

Regex("(([0-5]\\s)|([0-4]\\.\\d{0,2}\\s))|[5]\\.[0]{0,2}\\s").matches("2.0")

我很好奇我错过了什么导致这个失败。我已经转义了 / 字符并尝试使用没有转义的字符串文字进行变体,并且直接使用 Pattern/Matcher 也无济于事。

【问题讨论】:

  • 请注意,\s 匹配一个空格字符,而2.0 字符串在0 之后没有空格。您可以使用 """[0-4](?:\.\d{0,2})?|5(?:\.0{0,2})?""" 来匹配您的字符串。见rextester.com/VJX10843
  • 您的原始正则表达式不正确,因为它与 4.3. 匹配,并且您真的不需要为了处理 5 GPA 而进行两次交替,而您的做法是不完全正确。你可以使用这个正则表达式^(?:5(?:\.0{1,2})?|[0-4](?:\.\d{1,2})?)$Demo here

标签: java regex kotlin pattern-matching


【解决方案1】:

@Pushpesh Kumar Rajwanshi 的^(?:5(?:\.0{1,2})?|[0-4](?:\.\d{1,2})?)$ 的评论解决了我的问题。感谢您的及时回复并找到丢失的 4. 案例。

【讨论】:

    猜你喜欢
    • 2021-07-05
    • 2012-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-24
    • 1970-01-01
    相关资源
    最近更新 更多