Scala中的日期字符串不匹配

时间:2019-08-26 15:47:52

标签: scala pattern-matching case

我使用this定义了一个函数,如果字符串与模式匹配则返回0,否则返回0:

def verif (s:String): Int = {
 val p = """[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1]) (2[0-3]|[01][0-9]):[0-5][0-9]:[0-5][0-9].[0-9]{9}""".r
 s match {
 case p(item) => 0  
 case _ => 1
 }
}

执行时:

verif("2019-07-01 00:00:00.000000000") // Returns 1

我在多个在线测试器(herehere)上验证了我的正则表达式,并且该表达式可以正常工作。

1 个答案:

答案 0 :(得分:3)

您定义了3个捕获组,因此必须与三个组进行模式匹配。但是,仅使用 non-captureing 组和类似如下的代码是有道理的:

def verif (s:String): Int = {
  val p = """[0-9]{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[1-2][0-9]|3[0-1]) (?:2[0-3]|[01][0-9]):[0-5][0-9]:[0-5][0-9]\.[0-9]{9}""".r
  s match {
    case p() => 0  
    case _ => 1
  }
}
println(verif("2019-07-01 00:00:00.000000000"))   // => 0

请参见Scala demo

请注意,您还需要对点进行转义以匹配文字点。

相关问题