Scala Map [Regex,String] collectFirst错误

时间:2013-01-01 10:24:39

标签: regex scala

我正在尝试根据正则表达式匹配自动将字符串转换为Date。到目前为止我的代码如下:

package be.folks.date

import java.util.Date
import scala.util.matching.Regex
import org.joda.time.format.DateTimeFormat

class StringToDate(underlying:String) {

  val regmap : Map[Regex, String] = Map(
    ("""\d\d-\d\d-\d\d\d\d""".r, "dd-MM-yyyy"),
    ("""\d\d-\w\w\w-\d\d\d\d""".r, "dd-MMM-yyyy")
  )

  def toDate() : Date = { 
    DateTimeFormat.forPattern((regmap collectFirst { case (_(underlying) , v) => v  } get)).parseDateTime(underlying).toDate()
  }

}

object StringToDate {
  implicit def +(s:String) = new StringToDate(s)
}

但是,我收到的错误是“_” - )预期但找到了(。

我该如何纠正?

1 个答案:

答案 0 :(得分:1)

我不确定我理解您应用正则表达式的语法。也许,在toDate,您想要:

regmap collectFirst {
    case (pattern , v)  if((pattern findFirstIn underlying).nonEmpty) => v}

我也不会使用get从选项中提取字符串,因为如果找不到匹配的正则表达式会抛出异常。我不知道你想如何在你的代码中管理这种情况,所以我不能给你建议。