gpt4 book ai didi

nested - Pyparsing - 匹配最外面的一组嵌套括号

转载 作者:行者123 更新时间:2023-12-02 01:21:37 30 4
gpt4 key购买 nike

我正在尝试使用 pyparsing 来构建一个解析器,该解析器将匹配任意嵌套的一组括号内的所有文本。如果我们考虑这样的字符串:

"[A,[B,C],[D,E,F],G] Random Middle text [H,I,J]"

我想要的是解析器以返回两个匹配项的方式进行匹配:
[
"[A,[B,C],[D,E,F],G]",
"[H,I,J]"
]

我能够使用一连串的 originalTextFor 与 NestedExpr 混合来完成这个有点工作的版本,但是当您的嵌套比 OriginalTextFor 表达式的数量更深时,这会中断。

是否有一种直接的方法可以只匹配由nestedExpr 抓取的最外层表达式,或者一种修改其逻辑的方法,以便第一个配对匹配之后的所有内容都被视为纯文本而不是被解析?

更新:似乎接近我想要完成的一件事是来自nestedExpr的逻辑的这个修改版本:
def mynest(opener='{', closer='}'):
content = (empty.copy()+CharsNotIn(opener+closer+ParserElement.DEFAULT_WHITE_CHARS))
ret = Forward()
ret <<= ( Suppress(opener) + originalTextFor(ZeroOrMore( ret | content )) + Suppress(closer) )
return ret

这让我在那里的大部分方式,虽然有一个额外的列表包装在那里,我真的不需要,我真正想要的是将这些括号包含在字符串中(而不会进入无限通过不抑制它们来递归情况)。
parser = mynest("[","]")
result = parser.searchString("[A,[B,C],[D,E,F],G] Random Middle text [H,I,J]")
result.asList()
>>> [['A,[B,C],[D,E,F],G'], ['H,I,J']]

我知道我可以用一个简单的列表理解来去除这些,但如果我能消除第二个冗余级别,那将是理想的。

最佳答案

不知道为什么这不起作用:

sample = "[A,[B,C],[D,E,F],G] Random Middle text [H,I,J]"

scanner = originalTextFor(nestedExpr('[',']'))

for match in scanner.searchString(sample):
print(match[0])

打印:
'[A,[B,C],[D,E,F],G]'
'[H,I,J]'

“当您的嵌套比 OriginalTextFor 表达式的数量更深时,这会中断”是什么情况?

关于nested - Pyparsing - 匹配最外面的一组嵌套括号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39884906/

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