Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何将嵌入方括号中的一串字母转换为嵌入列表_Python_Regex_String Parsing_Brackets - Fatal编程技术网

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']]
regex
r'\[([^\[\]+)\]'
将匹配除方括号以外的方括号中的任何内容,在本例中,方括号将是
'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']