我正在尝试使用解析器组合器解析文本文件。我想在一个名为Example
. 这是一个显示输入文件表单的测试:
object Test extends ParsComb with App {
val input = """
0)
blah1
blah2
blah3
1)
blah4
blah5
END
"""
println(parseAll(examples, input))
}
这是我的尝试不起作用:
import scala.util.parsing.combinator.RegexParsers
case class Example(index: Int, text: String)
class ParsComb extends RegexParsers {
def examples: Parser[List[Example]] = rep(divider~example) ^^
{_ map {case d ~ e => Example(d,e)}}
def divider: Parser[Int] = "[0-9]+".r <~ ")" ^^ (_.toInt)
def example: Parser[String] = ".*".r <~ (divider | "END")
}
它失败了:
[4.1] failure: `END' expected but `b' found
blah2
^
我只是从这些开始,所以我不太清楚我在做什么。我认为问题可能与".*".r
正则表达式不做多行有关。如何更改它以使其正确解析?