繁体   English   中英

如何在不删除分隔符的情况下将字符串拆分为列表

[英]How do I split a string into a list without removing the delimiter

我有一个字符串'[0, 0, 0], [0, 0, 0], [0, 0, 0]'

我想把它分成一个列表,如['[0, 0, 0]', '[0, 0, 0]', '[0, 0, 0]']

您可以使用ast.literal_eval

>>> ast.literal_eval('[0, 0, 0], [0, 0, 0], [0, 0, 0]')
([0, 0, 0], [0, 0, 0], [0, 0, 0])

这也会解析您可能不想要的内部列表。

如果您愿意,将内部列表转换回字符串并不复杂:

>>> [str(inner) for inner in ast.literal_eval('[0, 0, 0], [0, 0, 0], [0, 0, 0]')]
['[0, 0, 0]', '[0, 0, 0]', '[0, 0, 0]']

你可以像这样使用正则表达式:

import re
re.findall('\[.*?\]',  '[0, 0, 0], [0, 0, 0], [0, 0, 0]')

产生结果:

['[0, 0, 0]', '[0, 0, 0]', '[0, 0, 0]']

注意使用 '*?' 在模式中使其不贪婪(否则它只会匹配第一个 [ 和最后一个 ] 之间的所有内容。

您可以通过以下方式实现:

    import ast

    L = '[0, 0, 0], [0, 0, 0], [0, 0, 0]'
    O = [str(p) for p in ast.literal_eval(L)]
    print(O)

Output:

['[0, 0, 0]', '[0, 0, 0]', '[0, 0, 0]']

您可以拆分'],' ,然后使用列表推导将']'添加回每个拆分字符串(最后一个除外,它可以添加到列表组合之外):

splits = '[0, 0, 0], [0, 0, 0], [0, 0, 0]'.split('],')
out = [x.strip() + ']' for x in splits[:-1]] + [splits[-1].strip()]

Output:

['[0, 0, 0]', '[0, 0, 0]', '[0, 0, 0]']

使用正则表达式和re.split

import re

s = '[0, 0, 0], [0, 0, 0], [0, 0, 0]'
out = re.split('(?<=]),\s*', s)

output: ['[0, 0, 0]', '[0, 0, 0]', '[0, 0, 0]']

它还处理出现在字符元素中的[]

import re

print(re.split(r"(?<=]), *?(?=\[)", '[0, 0, 0, "[", "]"], [0, 0, 0], [0, 0, 0]'))

# ['[0, 0, 0, "[", "]"]', '[0, 0, 0]', '[0, 0, 0]']

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM