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)
您可以使用正则表达式查找括号之间的所有项目,然后拆分结果:
>>> [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)