应该使用 Scala 模式匹配和正则表达式逐行解析文本文件。如果一行以"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
,就像在第一个但不工作的代码示例中一样?