给定一个正则表达式和一个字符串
val reg = "(a)(b)"
val str = "ab"
和相应的案例类
case class Foo(a: string, b: string)
如何将正则表达式与字符串匹配并将匹配项取消应用到案例类中,所以我有
Foo("a", "b")
到底?
给定一个正则表达式和一个字符串
val reg = "(a)(b)"
val str = "ab"
和相应的案例类
case class Foo(a: string, b: string)
如何将正则表达式与字符串匹配并将匹配项取消应用到案例类中,所以我有
Foo("a", "b")
到底?
在字符串中查找正则表达式并将结果分配给的结果的模式匹配Foo
。Regex的 API文档有一个类似的例子。
scala> val reg = "(a)(b)".r
reg: scala.util.matching.Regex = (a)(b)
scala> val str = "ab"
str: String = ab
scala> case class Foo(a: String, b: String)
defined class Foo
scala> val foo = reg.findFirstIn(str) match{
| case Some(reg(a,b)) => new Foo(a,b)
| case None => Foo("","")
| }
foo: Foo = Foo(a,b)
scala> foo.a
res2: String = a
scala> foo.b
res3: String = b
如果您确定匹配没问题,您可以对函数进行 currify 并使用 foldleft 将此版本应用于提取的参数列表:
> val reg = "(a)(b)".r
> val str = "ab"
> val f1 = (Foo.apply _).curried
// f1 : String => String => Foo
> val groups = reg.findFirstMatchIn(str).get.subgroups
// groups: List[String]
> val foo = ((f1 : Any) /: groups) { case (f: (String => Any), s) => f(s)} asInstanceOf[Foo]
foo: Foo = Foo(a,b)
有关 curried 的定义,请参见scala 中的Function2。