scala 模式匹配内联正则表达式

ih99xse1  于 2022-12-23  发布在  Scala
关注(0)|答案(1)|浏览(116)

我知道我可以在regex上使用如下捕获进行模式匹配:

val re = """a(\d)""".r
"a5" match {
  case re(x) => println(x)
  case _ => println("Oops")
}

5

我想知道是否有可能有这个正则表达式内联。对于下面的代码,我得到一个错误:

"a5" match {
  case """a(\d)""".r(x) => println(x)
  case _ => println("Oops")
}

case """a(\d)""".r(x) => println(x)
                ^
On line 2: error: '=>' expected but '.' found.
lyfkaqu1

lyfkaqu11#

一个简短(可能很难看)的方法可以使它看起来像一个内联调用,如下所示:

"""a(\d)""".r.unapplySeq("a5") match {
    case Some(x) => println(x.mkString)
    case _ => println("Oops")
  }

因此,您可以创建Regex示例,以后可以直接调用unapplySeq,而不是使用模式匹配。unapplySeq返回Option[List[String]],因此您最终可以在那里处理Option示例。
或者您可以将其设置得更短,例如:

println("""a(\d)""".r.unapplySeq("a5").fold("Oops")(_.mkString))

相关问题