2011-08-11 105 views
1

我与图像元数据的工作,并能提取一个字符串,它看起来像这样Python字符串剥离和拆分

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 

我试过使用“分割”和“切片”。我假设这里有一个层次结构,但我不确定接下来要去哪里。

回答

1

如果数据确实是格式化这样的:

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

输出:

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

这个工作太棒了!感谢所有的快速回复! – lacrossj

0

我不知道了很多关于Python,但我在逻辑上的想法是这样的:

  1. 分割上产生的AR逗号字符
  2. 循环并在第一个'['使用子字符串(indexOf)或类似的Python操作之后切断所有内容。
  3. 然后再次循环数组以重新连接字符串。

对不起,我不知道这样做的具体命令。希望能帮助到你!

1

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

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

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

0

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

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

用绳子分裂:

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

使用正则表达式:

import re 
names = re.findall(r'^\w+', your_text, re.MULTILINE) 
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