正则表达式用于解析变量名称

时间:2012-09-20 17:49:32

标签: regex

我正在尝试获取变量名称并将其存储在列表中,但是我在使用正则表达式时遇到了问题。所以,我有一个包含如下行的文件:

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,它符合我的需要,但是我可以只使用一个正则表达式将这些名称分组?

1 个答案:

答案 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循环中我们将逗号分隔为单独的值并将它们添加到结果中列表。