我想尝试做以下事情:
list.foreach {x =>
x match {
case """TEST: .*""" => println( "TEST" )
case """OXF.*""" => println("XXX")
case _ => println("NO MATCHING")
}
}
Run Code Online (Sandbox Code Playgroud)
这个想法是使用它像groovy switch case正则表达式匹配.但我似乎无法编译.什么是scala中正确的方法?
Ale*_*ula 21
您可以匹配预编译的正则表达式(如下面的第一种情况),也可以添加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")
}
}
Run Code Online (Sandbox Code Playgroud)
Xav*_*hot 10
开始Scala 2.13
,可以String
通过不应用字符串插值器直接模式匹配 a :
// 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")
Run Code Online (Sandbox Code Playgroud)