[英]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.