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. 我不确定如何分隔浮点部分,并且只使用正则表达式获取 var 名称(我想我可以使用捕获组)但我不确定当同一行上有多个 var 名称时该怎么办。另外,我只对浮点类型的变量感兴趣。任何提示都会有所帮助。

编辑 我刚刚想出了这个正则表达式\bfloat*\d* +\w*[ *,* *\w]*\b,它符合我的需要,但是我可以只用一个正则表达式来获得组中的名称吗?

4

1 回答 1

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 回答