输入文件包含以下行:
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]
答案 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)
答案 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)