我试图找到一种简单的方法来转换像这样的字符串:
a = '[[a b] [c d]]'
进入相应的嵌套列表结构,其中字母转换为字符串:
a = [['a', 'b'], ['c', 'd']]
我尝试使用
import ast
l = ast.literal_eval('[[a b] [c d]]')
l = [i.strip() for i in l]
找到here
但它不起作用,因为字符a,b,c,d不在引号内。
特别是我正在寻找转变的东西:
'[[X v] -s]'
成:
[['X', 'v'], '-s']
答案 0 :(得分:5)
您可以使用正则表达式查找括号之间的所有项目,然后拆分结果:
>>> [i.split() for i in re.findall(r'\[([^\[\]]+)\]',a)]
[['a', 'b'], ['c', 'd']]
正则表达式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']]
答案 1 :(得分:2)
使用isalpha
string方法将所有字符括在括号中:
a = '[[a b] [c d]]'
a = ''.join(map(lambda x: '"{}"'.format(x) if x.isalpha() else x, a))
现在a
是:
'[["a" "b"] ["c" "d"]]'
你可以使用json.loads
(提供@a_guest):
json.loads(a.replace(' ', ','))
答案 2 :(得分:1)
>>> import json
>>> a = '[[a b] [c d]]'
>>> a = ''.join(map(lambda x: '"{}"'.format(x) if x.isalpha() else x, a))
>>> a
'[["a" "b"] ["c" "d"]]'
>>> json.loads(a.replace(' ', ','))
[[u'a', u'b'], [u'c', u'd']]
这适用于遵循上述模式的任何程度的嵌套列表,例如
>>> a = '[[[a b] [c d]] [[e f] [g h]]]'
>>> ...
>>> json.loads(a.replace(' ', ','))
[[[u'a', u'b'], [u'c', u'd']], [[u'e', u'f'], [u'g', u'h']]]
有关'[[X v] -s]'
的具体示例:
>>> import json
>>> a = '[[X v] -s]'
>>> a = ''.join(map(lambda x: '"{}"'.format(x) if x.isalpha() or x=='-' else x, a))
>>> json.loads(a.replace('[ [', '[[').replace('] ]', ']]').replace(' ', ',').replace('][', '],[').replace('""',''))
[[u'X', u'v'], u'-s']