2012-07-06 40 views
1

好吧, 目前,如果给出像这样的字符串:的Python内插句串解析

A:0.1,B:0.2,(C:0.3,D:0.4)E:0.5,(F:0.6,G:0.7)H:0.8 

我使用这个:

child = Pstring[Pstring.find('(')+1:Pstring.find(')')] 

要遍历字符串,并打印出内括号,并将其分配给变量'孩子'

现在,我的问题是,我该怎么办:

W:1.0,X:1.1(A:0.1,B:0.2,(C:0.3,D:0.4)E:0.5,(F:0.6,G:0.7)H:0.8)Y:0.9 

这只是简单的包含外括号证明一切(除了W和X)为Y

的孩子

我目前得到的“孩子”的输出为:

A:0.1,B:0.2,(C:0.3,D:0.4 

而什么我希望代码首先解析外部括号,然后先抓住内部部分,然后再在外部工作。

谢谢!

+0

这功课吗? – inspectorG4dget 2012-07-06 20:36:21

回答

3

如果你只是想内部括号中的内容,你可以使用re.findall()与下面的正则表达式:

\(([^()]*)\) 

例如:

>>> import re 
>>> s = 'W:1.0,X:1.1(A:0.1,B:0.2,(C:0.3,D:0.4)E:0.5,(F:0.6,G:0.7)H:0.8)Y:0.9' 
>>> re.findall(r'\(([^()]*)\)', s) 
['C:0.3,D:0.4', 'F:0.6,G:0.7'] 

说明:

\(  # literal '(' 
(  # start capturing group 
    [^()]* # any characters except '(' and ')', any number 
)   # end capturing group 
\)  # literal ')' 

re.findall()返回捕获组f的内容或每场比赛。

+0

嗯,我想保持输出为一个字符串,而不是一个列表,因为我需要进一步拆分并在我的程序的其余部分将其剪切掉 – Sean 2012-07-06 20:45:58

+0

是否有一个.find函数从一个串? – Sean 2012-07-06 20:46:33

+0

@Sean:'rfind'。 – inspectorG4dget 2012-07-06 20:48:24