我需要编写一个解析器,它可以提取两个括号之间的所有文本:
parser("left-text ( text-to-extract ) right-text") = "text-to-extract"
text-to-extract可以包含括号,而left-text和right-text不能包含括号。我正在使用Scala解析器组合子,我希望解决方案能够适合它。你能帮助我吗?
text-to-extract
left-text
right-text
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) } }
gcxthw6b2#
如果左边的文本是{,右边的文本是},那么你的解析器应该如下所示。
{
}
def parser: Parser[String] = "{" ~> "[^}]*".r <~ "}"
诀窍是使用~>和<~,而不是~。
~>
<~
~
2条答案
按热度按时间jdgnovmf1#
下面是一个完整的示例,使用Scala 2.13.9来扩展@jseteny的答案
gcxthw6b2#
如果左边的文本是
{
,右边的文本是}
,那么你的解析器应该如下所示。诀窍是使用
~>
和<~
,而不是~
。