2012-07-06 38 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