0

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)
    }
  }

ただし、これには追加のステップがあるようです。最初に、collect の case ステートメントで正規表現が一致するかどうかを確認し、次に一致するグループを抽出するために再度一致するかどうかを確認します。正規表現の一致を一度だけチェックするだけでこれを行う方法はありますか?

4

2 に答える 2

4

最初の一致は必要ありません:

<other_code>.collect {
    case regex(feature, hash, value, weight) => (feature.split("\\^"), weight.toDouble)
}
于 2015-01-20T17:24:22.087 に答える