用'],['拆分字符串,但保留括号

时间:2014-12-16 00:56:48

标签: python string split

我有一个这种格式的字符串

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]"]

3 个答案:

答案 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语句)。没有通过正则表达式或人工黑客来操纵它。

请记住,这可能很危险。