我输入的格式如下:
"DataType: FieldName1, Fieldname2,FieldName3"
您可以拥有1个或多个字段名称。
例如:
User: Name, Address
Person: Age, Address,DOB
我尝试使用scala组捕获捕获字符串中的DataType和数组中的字段,这就是我现在所拥有的:
val dataTypeAndFieldsRegex = """(.+):(.*(,.*)?)""".r
"Person: Age, Address, DOB" match {
case dataTypeAndFieldsRegex(dataType, fields, _*) => {
println("dataType: " + dataType)
println("fields: " + fields)
}
问题是这里的字段是一个字符串。 如何将字段捕获为数组?
答案 0 :(得分:2)
使用scala的解析器组合器,您可以拥有这些漂亮的小规则,并将它们组合起来以解析更复杂的数据:
object SO29900085 extends App {
case class Schema(dataType: String, fields: Seq[String])
object SchemaParser extends RegexParsers {
def dataType: Parser[String] = """[^:]*""".r ^^ { _.toString }
def field: Parser[String] = """[a-zA-Z]+""".r
def fields: Parser[List[String]] = (field ~ ",".?).* ^^ { _.map(_._1) }
def schema: Parser[Schema] = (dataType ~ ":" ~ fields) ^^ {
case dataType ~ ":" ~ fields => Schema(dataType, fields)
}
}
println(SchemaParser.parse(SchemaParser.schema, "User: Name, Address"))
println(SchemaParser.parse(SchemaParser.schema, "Person: Age, Address,DOB"))
}
答案 1 :(得分:0)
您只需使用以下命令拆分fields
:
fields.split(",")
我不知道你打算如何使用它,因为如果你试图打印它,输出看起来大概是这样的:
dataType: Person
fields: [Ljava.lang.String;@29e495ff