【发布时间】: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.匹配,并且您真的不需要为了处理5GPA 而进行两次交替,而您的做法是不完全正确。你可以使用这个正则表达式^(?:5(?:\.0{1,2})?|[0-4](?:\.\d{1,2})?)$Demo here
标签: java regex kotlin pattern-matching