我正在尝试执行以下操作:
list.foreach {x =>
x match {
case """TEST: .*""" => println( "TEST" )
case """OXF.*""" => println("XXX")
case _ => println("NO MATCHING")
}
}
这个想法是使用它像groovy switch case正则表达式匹配。但我似乎无法编译。什么是scala中正确的方法?
答案 0 :(得分:20)
您可以匹配预编译的正则表达式(如下面的第一种情况),也可以添加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")
}
}
答案 1 :(得分:1)
从Scala 2.13
开始,可以通过unapplying a string interpolator直接对String
进行模式匹配:
// 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")