Python 将此类似列表的字符串(不带逗号)转换为列表

Python 将此类似列表的字符串(不带逗号)转换为列表,python,Python,我有这个字符串:- my_string = "[a:b][c:d][e:f]" 我想将其转换为如下列表:- my_list = ['[a:b]','[c:d]','[e:f]'] 请注意,列表的元素只是字符串。 然而,我尝试了以下方法:- ast.literal\u eval(我的字符串)和map(int,mystring) 它们都返回错误。 Split命令还返回以下内容:['[a:b][c:d]']。有人能帮我吗?提前谢谢。您有什么理由忽略[e:f] 无论采用哪种方法,都应该简单,如下所示

我有这个字符串:-

my_string = "[a:b][c:d][e:f]"
我想将其转换为如下列表:-

my_list = ['[a:b]','[c:d]','[e:f]']
请注意,列表的元素只是字符串。 然而,我尝试了以下方法:-
ast.literal\u eval(我的字符串)
map(int,mystring)

它们都返回错误。
Split命令还返回以下内容:['[a:b][c:d]']。有人能帮我吗?提前谢谢。

您有什么理由忽略
[e:f]

无论采用哪种方法,都应该简单,如下所示:

s = '[a:b][c:d][e:f]'
l = s.split(']')
for i in xrange(len(l)):
    l[i] += ']'
del l[len(l)-1] #The last one will currently only be ']'

这应该会得到通缉名单。

在每个
]后面加上分号。
:

my_string = "[a:b][c:d][e:f]"
my_string = my_string.replace("]", "];");
然后将其拆分:

my_list = my_string.split(';');

您可以使用
re.findall
,这可能不会更有效:

my_string = "[a:b][c:d][e:f]"

import re
re.findall("(\[.*?\])",my_string)
In [103]: timeit my_string.replace("][","] [").split()
1000000 loops, best of 3: 445 ns per loop

In [104]: %%timeit         
s = '[a:b][c:d][e:f]'
l = s.split(']')
for i in xrange(len(l)):
    l[i] += ']'
del l[len(l)-1] #Th
   .....: 
1000000 loops, best of 3: 1.04 µs per loop

In [105]: timeit r.findall(my_string)
1000000 loops, best of 3: 962 ns per loop
输出:

In [93]: r = re.compile("(\[.*?\])")

In [94]: my_string = "[a:b][c:d][e:f]"

In [95]: r.findall(my_string)
Out[95]: ['[a:b]', '[c:d]', '[e:f]']
或者使用
str.replace
在打开和关闭之间放置一个空格,然后拆分:

In [101]: my_string = "[a:b][c:d][e:f]"

In [102]: my_string.replace("][","] [").split()
Out[102]: ['[a:b]', '[c:d]', '[e:f]']
哪一个是最有效的:

my_string = "[a:b][c:d][e:f]"

import re
re.findall("(\[.*?\])",my_string)
In [103]: timeit my_string.replace("][","] [").split()
1000000 loops, best of 3: 445 ns per loop

In [104]: %%timeit         
s = '[a:b][c:d][e:f]'
l = s.split(']')
for i in xrange(len(l)):
    l[i] += ']'
del l[len(l)-1] #Th
   .....: 
1000000 loops, best of 3: 1.04 µs per loop

In [105]: timeit r.findall(my_string)
1000000 loops, best of 3: 962 ns per loop

split的另一个变体:

my_string = "[a:b][c:d][e:f]"
changed = []
for i in my_string.split(']'):
     changed.append(i+"]")

print changed[:len(changed)-1]      
其中:

['[a:b]', '[c:d]', '[e:f]'] 

你能解释清楚吗?对于某些输入,您希望得到什么样的结果?Zach感谢您指出错误。我忘了加[e:f]。您以前的答案有效。@ZachP您能重新发布您的答案吗?这就像一场灾难charm@Tania未删除。我以为你指的是更复杂的东西,所以我先删除了它。这将返回一个字符串,需要再次拆分以形成一个列表。最后一个元素也需要删除。谢谢你的逻辑:)谢谢你取消删除。这个就在横梁上。:)感谢您出色的解决方案。:)很有魅力