【发布时间】:2013-09-25 15:38:29
【问题描述】:
我正在使用 Scala 中的本机解析器组合器库,我想解析我输入的某些部分,而不是其他部分。具体来说,我想丢弃我关心的输入之间的所有任意文本。例如,使用此输入:
begin
Text I care about
Text I care about
DONT CARE
Text I don't care about
begin
More text I care about
...
现在我有:
object MyParser extends RegexParsers {
val beginToken: Parser[String] = "begin"
val dontCareToken: Parser[String] = "DONT CARE"
val text: Parser[String] = not(dontCareToken) ~> """([^\n]+)""".r
val document: Parser[String] = begin ~> text.+ <~ dontCareToken ^^ { _.mkString("\n") }
val documents: Parser[Iterable[String]] = document.+
但我不确定如何忽略 DONT CARE 之后的文本,直到下一个 begin。具体来说,我不想对该文本的形式做任何假设,我只想在下一个 begin 语句处重新开始解析。
【问题讨论】: