Scala的匹配情况对直接的正则表达式(Scala match case on regex dire

2019-08-18 04:50发布

我试图做类似如下:

list.foreach {x => 
     x match {
       case """TEST: .*""" => println( "TEST" )
       case """OXF.*"""   => println("XXX")
       case _             => println("NO MATCHING")
     }
}

我们的想法是使用它像常规开关的情况下正则表达式匹配。 但我似乎无法得到编译。 请告诉我正确的方式做到这一点在Scala呢?

Answer 1:

你既可以匹配上一个预编译的正则表达式(如下面的第一种情况),或添加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")
     }
   }

查看更多的信息在这里和一些背景这里 。



Answer 2:

开始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")


文章来源: Scala match case on regex directly
标签: scala