gpt4 book ai didi

python - 使用 pyparsing (latex) 解析嵌套组(带引号的字符串)

转载 作者:行者123 更新时间:2023-12-01 05:36:28 24 4
gpt4 key购买 nike

我想解析 LaTeX 文件中可能嵌套的组:如下所示:

import pyparsing as pp
qs = pp.QuotedString(quoteChar='{', endQuoteChar='}')
s = r'''{ This is a \textbf{\texttt{example}} of \textit{some $\mb{y}$ text} to parse.}'''
print qs.parseString(s)

但这不可能是正确的(它在第一个右大括号处停止)。输出为:

([' This is a \\textbf{\\texttt{example'], {})

如果我想要的只是组,我怎样才能获得可以迭代的结果,我正在考虑这样的返回:

{ This is a \textbf{\texttt{example}} of \textit{some $\mb{y}$ text} to parse.}
{\texttt{example}}
{example}
{some $\mb{y}$ text}
{y}

用例是测试 LaTeX 源文件中的常见标记错误。

最佳答案

这里的关键是您嵌套的括号要与其右括号正确匹配。您编写的语法确实会停在第一个右括号,而不是匹配的右括号。解决方案是定义一个语法,以便将新的左括号匹配为另一个部分。

import pyparsing as pp

allSections = []
def rememberSection(m):
allSections.append(''.join(m))
other = pp.Word(pp.printables.replace('{','').replace('}','') + ' \t\r\n')
section = pp.Forward()
section << ('{' + pp.OneOrMore(other | section) + '}').setParseAction(rememberSection)

s = r'''{ This is a \textbf{\texttt{example}} of \textit{some $\mb{y}$ text} to parse.}'''
print section.parseString(s)
print allSections

这将一个节内允许的内容定义为除了大括号或另一个节之外的所有内容。然后每个大括号与相应的右大括号相匹配。如果大括号不匹配,将引发 pyparsing.ParseException

通常,标记都会作为标记列表返回,每个标记都匹配“{”、“}”或一系列其他非大括号字符。由于我们希望记住每个括号表达式,因此这里的 parseAction 将它们添加到外部列表中。我不确定有什么更简洁的方法来处理它,但这将构造 allSections 列表,其中包含您想要的组。

关于python - 使用 pyparsing (latex) 解析嵌套组(带引号的字符串),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18923701/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com