パーサーコンビネーターを使用してテキストファイルを解析しようとしています。というクラスでインデックスとテキストをキャプチャしたいと思います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
問題は、正規表現が複数行を実行していないことにあると思います。正しく解析されるようにこれを変更するにはどうすればよいですか?