gpt4 book ai didi

python - Python 中的正则表达式大括号

转载 作者:太空宇宙 更新时间:2023-11-03 12:49:07 26 4
gpt4 key购买 nike

我有这样一个字符串:

a = '{CGPoint={CGPoint=d{CGPoint=dd}}}{CGSize=dd}dd{CSize=aa}'

目前我正在使用这个 re 语句来获得想要的结果:

filter(None, re.split("\\{(.*?)\\}", a))

但这给了我:

['CGPoint={CGPoint=d{CGPoint=dd', '}}', 'CGSize=dd', 'dd', 'CSize=aa']

这对我目前的情况是不正确的,我需要这样的列表:

['CGPoint={CGPoint=d{CGPoint=dd}}', 'CGSize=dd', 'dd', 'CSize=aa']

最佳答案

正如@m.buettner 在评论中指出的那样,Python 的正则表达式实现无法匹配嵌套到任意程度的符号对。 (其他语言可以,特别是当前版本的 Perl。)当您有正则表达式无法解析的文本时,Pythonic 的做法是使用递归下降解析器。

但是,没有必要通过自己编写来重新发明轮子;那里有许多易于使用的解析库。我推荐pyparsing它使您可以直接在代码中定义语法,并轻松地将操作附加到匹配的标记。您的代码看起来像这样:

import pyparsing

lbrace = Literal('{')
rbrace = Literal('}')
contents = Word(printables)
expr = Forward()
expr << Combine(Suppress(lbrace) + contents + Suppress(rbrace) + expr)

for line in lines:
results = expr.parseString(line)

关于python - Python 中的正则表达式大括号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17406514/

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