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

私はこれを使用しています:

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

文字列を繰り返し処理し、内側の括弧を出力して変数「child」に代入するには

さて、私の質問は、次の場合に同じことを行うにはどうすればよいかです。

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

私がコードに実行させたいのは、最初に外側の括弧を解析し、最初に内側の括弧を取得してから、最後に外側を処理することです。

ありがとう!

4

1 に答える 1

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()一致ごとにキャプチャ グループの内容を返します。

于 2012-07-06T20:41:04.897 に答える