0

変数名を取得してリストに保存しようとしていますが、正規表現を出すのに問題があります。したがって、次のような行を含むファイルがあります。

float func(float a, float b, float c)
{
   float i, j,           k;
   float2 w;
}

私がやりたいことは、パラメータ var と local var とともに関数の名前を取得することです。だから、正規表現を返したいfunc a b c i j k w

そして私の現在の正規表現は\bfloat*\d* +\w*\b

を見つけfloat func float a float b float c float i float wます。float 部分を分離し、正規表現で var 名のみを取得する方法がわかりません (キャプチャ グループを使用できると思います)が、同じ行に複数の var 名がある場合はどうすればよいかわかりません。また、float 型の変数にのみ関心があります。どんなヒントでも役に立ちます。

編集済み この正規表現を思いついた\bfloat*\d* +\w*[ *,* *\w]*\bのですが、これは必要なものと一致しますが、単一の正規表現だけでグループ内の名前を取得できますか?

4

1 に答える 1

2

単一の正規表現でそれを行うことは不可能であると確信しているため、これを2つのステップで行う方法を次に示します。

import re

data = '''float func(float a, float b, float c)
{
   float i, j,           k;
   float2 w;
   float a, int b;
}'''
regex = re.compile(r'\bfloat2?\s+(\w+(?:,\s*(?!\w+\s+\w+)\w+)*)')
var_list = []
for vars in regex.findall(data):
    vars = (v.strip() for v in vars.split(','))
    var_list.extend((v for v in vars if v))

print var_list
# ['func', 'a', 'b', 'c', 'i', 'j', 'k', 'w', 'a']

これは、キャプチャ グループにすべてのカンマ区切りの値が含まれるように、正規表現にわずかな変更を加えるだけfloatです。次に、forループ内でカンマ区切りの値を分割し、それらを結果リストに追加します。

于 2012-09-20T21:02:32.177 に答える