使用python regex提取变量

时间:2016-05-04 20:48:02

标签: python regex python-2.7

输入文件包含以下行:

a=b*c;
d=a+2;
c=0;
b=a;

现在,对于每一行,我想提取已经使用过的变量。例如,对于第1行,输出应为[a,b,c]。目前我的操作如下:

var=[a,b,c,d]     # list of variables
for line in file_ptr :
    if '=' in line :
        temp=line.split('=') :
        ans=list(temp[0])
        if '+' in temp[1] :
             # do something
        elif '*' in temp[1] :
             # do something
        else :
             # single variable as line 4  OR constant as line 3

是否可以使用正则表达式执行此操作?

修改

上述文件的预期输出:

[a,b,c]
[d,a]
[c]
[a,b]

5 个答案:

答案 0 :(得分:1)

我会使用re.findall()与示例编程语言中的变量名匹配的模式。假设使用典型语言,这可能适合您:

import re

lines = '''a=b*c;
d=a+2;
c=0;
b=a;'''

for line in lines.splitlines():
    print re.findall('[_a-z][_a-z0-9]*', line, re.I)

答案 1 :(得分:1)

我使用一些较短的模式来匹配变量名称:

import re
strs = ['a=b*c;', 'd=a+2;', 'c=0;', 'b=a;']
print([re.findall(r'[_a-z]\w*', x, re.I) for x in strs])

请参阅Python demo

模式匹配:

  • [_a-z] - _或ASCII字母(由于不区分大小写的修饰符使用re.I,任何大写或小写)
  • \w* - 0个或更多字母数字或下划线字符。

请参阅regex demo

答案 2 :(得分:0)

如果您只想要变量,请执行以下操作:

answer = []
for line in file_ptr :
    temp = []
    for char in line:
        if char.isalpha():
            temp.append(char)
    answer.append(temp)

但请注意:这只适用于长度恰好为1个字符的变量。有关isalpha()的更多详情,请访问herehere

答案 3 :(得分:0)

我不完全确定你之后的事情,但你可以这样做:

re.split(r'[^\w]', line)

给出一行中的字母字符列表:

>>> re.split(r'[^\w]', 'a=b*c;')
['a', 'b', 'c', '']

答案 4 :(得分:0)

这就是我的做法:

l=re.split(r'[^A-Za-z]', 'a=b*2;')
l=filter(None,l)