特定文本区域的 Scala 代表分隔符
Scala rep separator for specific area of text
成像我有以下内容:
--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))
open body里面的client可以有你想象的那么多,所以list可以有任意大小,不固定。
我试图在以下帮助下制作:
repsep(".*".r , "Client: enter" + lineSeparator)
在这种情况下,我只能解析这一行 List((Client: enter))
,如何确保您使用的是同一段解析文本?
我猜你正在使用 RegexParsers
(请注意它默认会跳过空格)。我假设它以 "\n\n--open--"
结尾(如果您可以更改它,否则我将向您展示如何修改 repsep
解析器)。通过此更改,我们看到文本具有以下结构:
- 每个客户端由文本分隔
"Client: enter"
- 那么需要解析非空之后的每一行,用回车分隔return
- 如果你有一个空行,解析两个行分隔符并尽可能重复步骤 2 否则这意味着我们到达输入的末尾
那么解析器的实现就很简单了:
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))
成像我有以下内容:
--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))
open body里面的client可以有你想象的那么多,所以list可以有任意大小,不固定。
我试图在以下帮助下制作:
repsep(".*".r , "Client: enter" + lineSeparator)
在这种情况下,我只能解析这一行 List((Client: enter))
,如何确保您使用的是同一段解析文本?
我猜你正在使用 RegexParsers
(请注意它默认会跳过空格)。我假设它以 "\n\n--open--"
结尾(如果您可以更改它,否则我将向您展示如何修改 repsep
解析器)。通过此更改,我们看到文本具有以下结构:
- 每个客户端由文本分隔
"Client: enter"
- 那么需要解析非空之后的每一行,用回车分隔return
- 如果你有一个空行,解析两个行分隔符并尽可能重复步骤 2 否则这意味着我们到达输入的末尾
那么解析器的实现就很简单了:
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))