val patterns = Seq(
"the name and age are ([a-z]+), ([0-9]+)".r,
"name:([a-z]+),age:([0-9]+)".r,
"n=([a-z]+),a=([0-9]+)".r
)
def transform(subject: String): Option[String] = {
patterns.map(_.unapplySeq(subject)).collectFirst { case Some(List(name, age)) => s"$name$age" }
}
println(transform("name:joe,age:42")) // Some(joe42)这段在regexes列表中查找和转换第一个匹配的代码可以通过对一般情况的早期返回来改进。
在考虑到patterns性能和线程安全的情况下,使成为一个懒惰集合的最佳方法是什么?一个视图可以被多个线程重用,或者应该为每次调用transform创建一个新的视图吗?
patterns.viewpatterns.to(LazyList)发布于 2021-12-07 20:19:25
我仍然觉得使用单个正则表达式可能有好处。
val pattern = List("the name and age are (\\w+), (\\d+)"
,"name:(\\w+),age:(\\d+)"
// add more as needed
,"n=(\\w+),a=(\\d+)"
).mkString("|").r
def transform(subject: String): Option[String] =
pattern.findFirstMatchIn(subject)
.map(_.subgroups.filter(_ != null).mkString)https://stackoverflow.com/questions/70237819
复制相似问题