如何将嵌入方括号中的字母串转换为嵌入列表

Dan*_*niz 3 python regex brackets string-parsing

我试图找到一种简单的方法来转换像这样的字符串:

a = '[[a b] [c d]]'
Run Code Online (Sandbox Code Playgroud)

进入相应的嵌套列表结构,其中字母转换为字符串:

a = [['a', 'b'], ['c', 'd']]
Run Code Online (Sandbox Code Playgroud)

我试着用

import ast
l = ast.literal_eval('[[a b] [c d]]')
l = [i.strip() for i in l]
Run Code Online (Sandbox Code Playgroud)

这里找到

但它不起作用,因为字符a,b,c,d不在引号内.

特别是我正在寻找转变的东西:

'[[X v] -s]'
Run Code Online (Sandbox Code Playgroud)

成:

[['X', 'v'], '-s']
Run Code Online (Sandbox Code Playgroud)

Kas*_*mvd 5

您可以使用正则表达式查找括号之间的所有项目,然后拆分结果:

>>> [i.split() for i in re.findall(r'\[([^\[\]]+)\]',a)]
[['a', 'b'], ['c', 'd']]
Run Code Online (Sandbox Code Playgroud)

正则表达式r'\[([^\[\]]+)\]'将匹配除方括号之外的方括号之间的任何内容,在这种情况下将是'a b','c d'然后您可以简单地使用列表推导来分割字符.

请注意,此正则表达式适用于这样的情况,其中所有字符都在括号之间,而对于另一种情况,您可以编写相应的正则表达式,也不是正则表达式滴答在所有情况下都不起作用.

>>> a = '[[a b] [c d] [e g]]'
>>> [i.split() for i in re.findall(r'\[([^\[\]]+)\]',a)]
[['a', 'b'], ['c', 'd'], ['e', 'g']]
Run Code Online (Sandbox Code Playgroud)