Python 如何将嵌入方括号中的一串字母转换为嵌入列表
我试图找到一种简单的方法来转换字符串,如下所示:Python 如何将嵌入方括号中的一串字母转换为嵌入列表,python,regex,string-parsing,brackets,Python,Regex,String Parsing,Brackets,我试图找到一种简单的方法来转换字符串,如下所示: 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] 发现 但它不起作用,因为字符a、b、c、d不在引号内 特别是,我正在寻找能够: '[[X v] -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]
发现
但它不起作用,因为字符a、b、c、d不在引号内
特别是,我正在寻找能够:
'[[X v] -s]'
进入:
您可以使用正则表达式查找括号中的所有项目,然后拆分结果:
>>> [i.split() for i in re.findall(r'\[([^\[\]]+)\]',a)]
[['a', 'b'], ['c', 'd']]
regexr'\[([^\[\]+)\]'
将匹配除方括号以外的方括号中的任何内容,在本例中,方括号将是'ab'
和'cd'
,然后您可以简单地使用列表理解来拆分字符
请注意,这个正则表达式只适用于这样的情况,即所有字符都在括号中,对于其他情况,您可以编写相应的正则表达式,也不是说正则表达式勾号不会在所有情况下都有效
>>> 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):
这将适用于遵循上述模式的任何级别的嵌套列表,例如
>>> 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']
同意只需将其添加到答案中,使用
json.loads(a.replace('',')
而不是ast.literal\u eval
删除以前的注释考虑因素,因为这样可以处理三重(或更高)嵌套列表。我正在尝试解决这个问题,例如:a='[[a b]c][a[b]d]'但是它给了我一个错误,这就是为什么你应该使用我在前面的评论中提到的json.loads
。它工作得很好,但是。。我们能不能把它修好,让它对空位不那么挑剔?i、 是的,用a.replace('','')
替换('','').replace(']['','')。太棒了,我知道我很痛苦,但是…为什么它会崩溃?-->'是否要修复它以便公式中的任何空格都不会出现错误?它将在]]
的两个括号之间插入一个,
。如果您有这样的模式,只需执行a.replace(“[[”,“[[”).replace(“]]”,“]]”),replace(“,”).replace(“][”,“],[”)
。请注意,这只适用于两个括号之间的单个空格,如果您有更多空格,则可能需要使用正则表达式。很抱歉再次打扰您…是否有任何方法可以破解此问题,使其适用于此示例:“[[X v]-s]”,即我作为输出:[[[X',v'],“-s'](请参阅问题的最后一次编辑)
>>> 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']]]
>>> 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']