我正在尝试获取变量名称并将其存储在列表中,但是我在使用正则表达式时遇到了问题。所以,我有一个包含如下行的文件:
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名称时该怎么办。另外,我只对float类型的变量感兴趣。任何提示都会有所帮助。
EDITED
我刚刚提出了这个正则表达式\bfloat*\d* +\w*[ *,* *\w]*\b
,它符合我的需要,但是我可以只使用一个正则表达式将这些名称分组?
答案 0 :(得分:1)
以下是分两步执行此操作的方法,因为我很确定在单个正则表达式中执行此操作是不可能的:
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
循环中我们将逗号分隔为单独的值并将它们添加到结果中列表。