将带paratheses的字符串转换为嵌套的lis

2024-04-27 15:04:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我想转换如下字符串:

"asd foo bar ( lol bla ( gee bee ) lee ) ree"

对于这样的列表:

^{pr2}$

有简单的解决办法吗?在

对任何一个字符串都是有效的,但是它应该是有效的

edit2:空格可以看作分隔符,如果不匹配,可能会引发错误或根本不起作用,我不在乎。它只需要为格式良好的字符串工作。在


Tags: 字符串列表foobarbee空格lolbla
2条回答

您可以使用Python的解析器来完成这项工作。帮一点忙:

>>> a = "asd foo bar ( lol bla ( gee bee ) lee ) ree"
>>> eval(str(a.split()).replace("'(',", '[').replace("')'",']'))
['asd', 'foo', 'bar', ['lol', 'bla', ['gee', 'bee'], 'lee'], 'ree']

如果您需要它是安全的,请改用ast.literal_eval!在

Pyparsing附带了一个内置的helper方法nestedExpr

>>> from pyparsing import nestedExpr
>>> a = "asd foo bar ( lol bla ( gee bee ) lee ) ree"
>>> # have to put total string into ()'s
>>> printed nestedExpr().parseString("(%s)" % a).asList()[0]
['asd', 'foo', 'bar', ['lol', 'bla', ['gee', 'bee'], 'lee'], 'ree']

这里唯一的诀窍是,为了保持解析器的简单性,整个字符串必须包装在一对()中。nestedExpr的默认分隔符是(),但可以是任何其他字符串对或pyparsing表达式。在

相关问题 更多 >