我试图做类似如下:
list.foreach {x =>
x match {
case """TEST: .*""" => println( "TEST" )
case """OXF.*""" => println("XXX")
case _ => println("NO MATCHING")
}
}
我们的想法是使用它像常规开关的情况下正则表达式匹配。 但我似乎无法得到编译。 请告诉我正确的方式做到这一点在Scala呢?
你既可以匹配上一个预编译的正则表达式(如下面的第一种情况),或添加if
条款。 请注意,您通常不希望重新编译每个相同的正则表达式case
的评价,而是有它的对象上。
val list = List("Not a match", "TEST: yes", "OXFORD")
val testRegex = """TEST: .*""".r
list.foreach { x =>
x match {
case testRegex() => println( "TEST" )
case s if s.matches("""OXF.*""") => println("XXX")
case _ => println("NO MATCHING")
}
}
查看更多的信息在这里和一些背景这里 。
开始Scala 2.13
,有可能直接模式匹配String
由unapplying字符串插值 :
// val examples = List("Not a match", "TEST: yes", "OXFORD")
examples.map {
case s"TEST: $x" => x
case s"OXF$x" => x
case _ => ""
}
// List[String] = List("", "yes", "ORD")