我有一个这种格式的字符串
a = "[a,b,c],[e,d,f],[g,h,i]"
我要分割的每个部分由],[
分隔。我尝试a.split("],[")
并删除了结束括号。
在我的例子中:
["[a,b,c","e,d,f","g,h,i]"]
我想知道在拆分后是否有办法保留括号?
期望的结果:
["[a,b,c]","[e,d,f]","[g,h,i]"]
答案 0 :(得分:6)
问题是str.split
会从结果列表中删除您分割的子字符串。我认为在这种情况下使用re
模块中稍微强大的split
函数会更好:
>>> from re import split
>>> a = "[a,b,c],[e,d,f],[g,h,i]"
>>> split(r'(?<=\]),(?=\[)', a)
['[a,b,c]', '[e,d,f]', '[g,h,i]']
>>>
(?<=\])
是一个寻找]
的后瞻性断言。同样,(?=\[)
是一个前瞻性断言,它会查找[
。这两种结构都在Regular Expression Syntax中解释。
答案 1 :(得分:2)
Python非常灵活,因此您只需稍微管理它并适应您的情况。
In [8]:a = "[a,b,c],[e,d,f],[g,h,i]"
a.replace('],[','] [').split(" ")
Out[8]:['[a,b,c]', '[e,d,f]', '[g,h,i]']
答案 2 :(得分:1)
其他答案是正确的,但这是另一种方法。
重要提示:这只是为了提供另一个可能在某些情况下有用的选项。不要在一般情况下这样做,只在你这样做,并且绝对确定你可以控制你传递给exec
陈述的表达。
# provided you declared a, b, c, d, e, f, g, h, i beforehand
>>> exp = "[a,b,c],[e,d,f],[g,h,i]"
>>> exec("my_object = " + exp)
>>> my_object
([a,b,c],[e,d,f],[g,h,i])
然后,您可以使用my_object
执行任何操作。
如果您完全控制exp
,这种方式对我来说听起来更合适和Pythonic,因为您正在将一段用字符串编写的Python代码视为...编写的一段Python代码在一个字符串中(因此exec
语句)。没有通过正则表达式或人工黑客来操纵它。
请记住,这可能很危险。