我想将 Scala 的 collect 函数与正则表达式一起使用。理想情况下,我只想收集那些与正则表达式匹配的术语。到目前为止,我已经实现了以下工作正常
val regex = "(^([^:]+):([^:]+):([^:]+):([+]?[0-9]*\\.?[0-9]+([eE][-+]?[0-9]+)?)$".r
<other_code>.collect{case x: String if regex.pattern.matcher(x).matches =>
x match {
case regex(feature, hash, value, weight) => (feature.split("\\^"), weight.toDouble)
}
}
不过,这似乎有一个额外的步骤。我首先检查正则表达式是否在收集的 case 语句中匹配,然后我检查它是否再次匹配以提取匹配的组。有没有办法只检查一次正则表达式匹配来做到这一点?