Python字符串剥离和拆分

时间:2011-08-11 17:27:47

标签: python string split

我正在使用图像元数据,并能够提取看起来像这样的字符串

Cube1[visible:true, mode:Normal]{r:Cube1.R, g:Cube1.G, b:Cube1.B, a:Cube1.A},
Ground[visible:true, mode:Normal]{r:Ground.R, g:Ground.G, b:Ground.B, a:Ground.A},
Cube3[visible:true, mode:Normal]{r:Cube3.R, g:Cube3.G, b:Cube3.B, a:Cube3.A},
Cube4[visible:true, mode:Normal]{r:Cube4.R, g:Cube4.G, b:Cube4.B, a:Cube4.A},
Sphere[visible:true, mode:Normal]{r:Sphere.R, g:Sphere.G, b:Sphere.B, a:Sphere.A},
OilTank[visible:true, mode:Normal]{r:OilTank.R, g:OilTank.G, b:OilTank.B, a:OilTank.A},
Cube2[visible:true, mode:Normal]{r:Cube2.R, g:Cube2.G, b:Cube2.B, a:Cube2.A}

我将那个大混乱转换为只有图层名称。我还需要订单保持不变。所以,在这种情况下,它将是:

Cube1
Ground
Cube3
Cube4
Sphere
OilTank
Cube2

我尝试过使用“split”和“slice”。我假设这里有一个层次结构,但我不知道下一步该去哪里。

6 个答案:

答案 0 :(得分:1)

如果确实形成了这样的数据:

    import re
    i = [the listed string] 
    names = [j.strip('[') for j in re.findall("\w+\[\.*", i)]

输出:

['Cube1', 'Ground', 'Cube3', 'Cube4', 'Sphere', 'OilTank', 'Cube2']

答案 1 :(得分:1)

如果您只需要最左边的部分,我会使用:

name, _ = line.split("[", 1)

如果你需要更复杂的东西,我会考虑使用re模块的正则表达式...让我知道,我可以提出建议。

答案 2 :(得分:1)

>>> mess = 'Cube1[visible:true, mode:Normal]{r:Cube1.R, g:Cube1.G, b:Cube1.B, a:Cube1.A},\nGround[visible:true, mode:Normal]{r:Ground.R, g:Ground.G, b:Ground.B, a:Ground.A},\nCube3[visible:true, mode:Normal]{r:Cube3.R, g:Cube3.G, b:Cube3.B, a:Cube3.A},\nCube4[visible:true, mode:Normal]{r:Cube4.R, g:Cube4.G, b:Cube4.B, a:Cube4.A},\nSphere[visible:true, mode:Normal]{r:Sphere.R, g:Sphere.G, b:Sphere.B, a:Sphere.A},\nOilTank[visible:true, mode:Normal]{r:OilTank.R, g:OilTank.G, b:OilTank.B, a:OilTank.A},\nCube2[visible:true, mode:Normal]{r:Cube2.R, g:Cube2.G, b:Cube2.B, a:Cube2.A}'
>>> names = "\n".join(line.split("[", 1)[0] for line in mess.split("\n"))
>>> print names
Cube1
Ground
Cube3
Cube4
Sphere
OilTank
Cube2

答案 3 :(得分:0)

我对python知之甚少,但我在逻辑方面的想法是这样的:

  1. 以逗号字符分割
  2. 在结果数组上循环,并在第一个'['使用子字符串(indexOf)或类似的python操作后切断所有内容。
  3. 然后再次遍历数组以将字符串连接在一起。
  4. 抱歉,我不知道执行此操作的具体命令。希望它有所帮助!

答案 4 :(得分:0)

正则表达式是不必要的,假设确实是您数据的确切格式。

[i.split('[', 1)[0] for i in lst]

答案 5 :(得分:0)

使用字符串拆分:

names = [ x.split('[')[0] for x in your_text.split('\n') ]

使用正则表达式:

import re
names = re.findall(r'^\w+', your_text, re.MULTILINE)