Scala直接在正则表达式上匹配大小写
我正在尝试做如下事情:Scala直接在正则表达式上匹配大小写,scala,Scala,我正在尝试做如下事情: list.foreach {x => x match { case """TEST: .*""" => println( "TEST" ) case """OXF.*""" => println("XXX") case _ => println("NO MATCHING") } } 其思想是像groovy switch case regex match一样
list.foreach {x =>
x match {
case """TEST: .*""" => println( "TEST" )
case """OXF.*""" => println("XXX")
case _ => println("NO MATCHING")
}
}
其思想是像groovy switch case regex match一样使用它。但我似乎无法编译。在scala中,正确的方法是什么?您可以在预编译的正则表达式上进行匹配(如下面的第一种情况),或者在 条款请注意,您通常不希望在每个
案例
求值中重新编译相同的正则表达式,而是将其放在对象上
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
开始,可以通过以下方式直接对字符串进行模式匹配:
我希望scala为处理这个问题添加更多的语法糖,我不喜欢额外的代码来匹配更简单的正则表达式。在花了相当长的时间来了解如何做到这一点后,我简直不敢相信它在Scala中是不可行的,因此出现了StackOverflow帖子!使用val testRegex=“”TEST:(.*)”.r
和case testRegex(m)=>println(“TEST”+m)
捕获匹配
// 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")