scala 使用解析器组合子提取嵌套表达式

rbl8hiat  于 2022-12-13  发布在  Scala
关注(0)|答案(2)|浏览(162)

我需要编写一个解析器,它可以提取两个括号之间的所有文本:

parser("left-text ( text-to-extract ) right-text") = "text-to-extract"

text-to-extract可以包含括号,而left-textright-text不能包含括号。
我正在使用Scala解析器组合子,我希望解决方案能够适合它。你能帮助我吗?

jdgnovmf

jdgnovmf1#

下面是一个完整的示例,使用Scala 2.13.9来扩展@jseteny的答案

import scala.util.parsing.combinator.RegexParsers

class DemoParser extends RegexParsers {
  def removeBraces: Parser[String] = "{" ~> "[^}]*".r <~ "}"
}
object ExtractNested {
  def main(args: Array[String]): Unit = {
    val parser = new DemoParser
    val result = parser.parseAll(parser.removeBraces, "{text-to-extract}")
    println(result.get)
  }
}
gcxthw6b

gcxthw6b2#

如果左边的文本是{,右边的文本是},那么你的解析器应该如下所示。

def parser: Parser[String] = "{" ~> "[^}]*".r <~ "}"

诀窍是使用~><~,而不是~

相关问题