Я пытаюсь разобрать текстовый файл с помощью комбинаторов парсера. Я хочу захватить индекс и текст в классе под названием 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
, не выполняющим многострочные строки. Как я могу изменить это так, чтобы он правильно разбирался?
Спасибо, отличный ответ - напишите больше в StackOverflow! –