我有3行解析
repsep
我想使用def parseLines: Parser[Map[String, String]] = repsep(parse, lineSeparator)
scala函数和新的行分隔符,如下所示:
lineSeparator
其中opt(repsep)
只是" \ n"
但有时可能会有一个没有任何名称的空行,只是空行。在这种情况下,我想忽略这个功能
我试图使用似乎合乎逻辑的<xsl:template match="DataSet1|DataSet2">
,但这不起作用
我能在这做什么? THX
答案 0 :(得分:0)
通过空行,我假设你可以拥有这样的数据:
John Smith
<-- empty line
Nick Jackson
Liza Ashwood
在这种情况下,它意味着lineSeparator
的两倍。因此,你可以使用rep1
组合子来告诉应该至少有1个,但每行数据之间可以有更多的行分隔符:
def parseLines: Parser[Map[String, String]] = repsep(line, rep1("\n")) ^^ (ListMap() ++_ )
例如:
object MyParser extends RegexParsers {
override def skipWhitespace = false
def parse(input: java.io.Reader) = parse(parseLines, input) match {
case Success(res, _) => res
case e => throw new RuntimeException(e.toString)
}
def parseLines: Parser[Map[String, String]] = repsep(line, rep1("\n")) ^^ (ListMap() ++_ )
def oneOrMoreletters = "[a-zA-Z]+".r
def line:Parser[(String, String)] = (oneOrMoreletters <~ " ") ~ oneOrMoreletters ^^ (t => (t._1, t._2))
}