成像我有以下几点:
--open
Client: enter
Nick
Age 28
Rosewell, USA
Client: enter
Maria
Age 19
Cleveland, USA
--open--
我需要一个接近以下结果:List(List(Nick, Age 28, Rosewell), List(Maria, Age19, Cleveland))
它可以像你想象的那样在开放体内有很多客户端,所以列表可以有任何大小,它不是固定的。
我试图在以下的帮助下制作:
repsep(".*".r , "Client: enter" + lineSeparator)
在这种情况下,我可以解析这一行List((Client: enter))
,如何确保使用相同的解析文本?
答案 0 :(得分:1)
我猜您正在使用RegexParsers
(请注意,默认情况下它会跳过空格)。我假设它以"\n\n--open--"
结束(如果你可以改变它,否则我会告诉你如何修改repsep
解析器)。通过此更改,我们看到文本具有以下结构:
"Client: enter"
<小时/> 然后解析器的实现很简单:
object ClientParser extends RegexParsers {
override def skipWhitespace = false
def lineSeparator = "\n"
def root = "--open" ~> lineSeparator ~> rep(client) <~ "--open--"
def client = ("Client: enter" ~ lineSeparator) ~> repsep(".+".r, lineSeparator) <~ rep(lineSeparator)
}
用:
运行它--open
Client: enter
Nick
Age 28
Rosewell; USA
Client: enter
Maria
Age 19
Cleveland; USA
--open--
你得到:
[12.9] parsed: List(List(Nick, Age 28, Rosewell; USA), List(Maria, Age 19, Cleveland; USA))