使用正则表达式进行Scala数组模式匹配

elm*_*elm 5 arrays string scala pattern-matching

如何使用正则表达式对数组中的第一个字符串元素进行模式匹配?

例如,考虑一下

Array("col",1) match {
  case Array("""col | row""", n, _*) => n
  case _ => 0
}
Run Code Online (Sandbox Code Playgroud)

0虽然期望的结果是1,但它可以提供.

非常感谢.

mik*_*łak 7

Regex实例自动提供提取器,这样就可以在一个模式匹配表达式直接使用一个:

val regex = "col|row".r

Array("col",1) match {
  case Array(regex(), n, _*) => n
  case _ => 0
}
Run Code Online (Sandbox Code Playgroud)

另外:在Scala中关于regexp的更一般的QA中,sschaef 为模式匹配使用提供了非常好的字符串插值(例如r"col|row"在本例中).一个潜在的警告:插值会Regex在每次调用时创建一个新的实例 - 因此,如果您多次使用相同的正则表达式,则将其存储在一个相反的位置(如此答案中)可能更有效val.