如何将方括号中嵌入的一串字母转换为嵌入列表
how to turn a string of letters embedded in squared brackets into embedded lists
我正在尝试找到一种简单的方法来转换这样的字符串:
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']
您可以使用正则表达式查找括号内的所有项目,然后拆分结果:
>>> [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']]
使用字符串的isalpha
方法将所有字符包在括号中:
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(' ', ','))
>>> 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']
我正在尝试找到一种简单的方法来转换这样的字符串:
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']
您可以使用正则表达式查找括号内的所有项目,然后拆分结果:
>>> [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']]
使用字符串的isalpha
方法将所有字符包在括号中:
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(' ', ','))
>>> 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']