scala repsep与新的非空行分隔符

时间:2015-05-28 18:30:07

标签: regex scala parsing

我有3行解析

repsep

我想使用def parseLines: Parser[Map[String, String]] = repsep(parse, lineSeparator) scala函数和新的行分隔符,如下所示:

lineSeparator

其中opt(repsep)只是" \ n"

但有时可能会有一个没有任何名称的空行,只是空行。在这种情况下,我想忽略这个功能

我试图使用似乎合乎逻辑的<xsl:template match="DataSet1|DataSet2"> ,但这不起作用

我能在这做什么? THX

1 个答案:

答案 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))

}