テキストファイルは、Scalaパターンマッチングと正規表現を使用して、1行ずつ解析する必要があります。"names:\t"
行が後続のタブで始まる場合は、名前をSeq[String]
(または同様のもの)として指定する必要があります。
ここに機能しないコード例があります:
val Names = "^names:(?:\t([a-zA-Z0-9_]+))+$".r
"names:\taaa\tbbb\tccc" match {
case Names(names @ _*) => println(names)
// […] other cases
case _ => println("no match")
}
出力:List(ccc)
必要な出力:List(aaa, bbb, ccc)
次のコードは希望どおりに機能します…</p>
object NamesObject {
private val NamesLine = "^names:\t([a-zA-Z0-9_]+(?:\t[a-zA-Z0-9_]+)*)$".r
def unapplySeq(s: String): Option[Seq[String]] = s match {
case NamesLine(nameString) => Some(nameString.split("\t"))
case _ => None
}
}
"names:\taaa\tbbb\tccc" match {
case NamesObject(names @ _*) => println(names)
// […] other cases
case _ => println("no match")
}
出力(必要に応じて):WrappedArray(aaa, bbb, ccc)
知りたいのですが、これは、最初の、しかし機能しないコード例のように、を作成せずに簡単な方法で可能ですか?object