簡體   English   中英

使用python正則表達式提取變量

[英]Extract variables using python regex

輸入文件包含以下幾行:

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

現在,對於每一行,我想提取已使用的變量。例如,對於第一行,輸出應為[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]

我將使用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)

我會使用一些較短的模式來匹配變量名:

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演示

模式匹配:

  • [_a-z] _或ASCII字母(由於不區分大小寫的修飾符使用re.I因此任何大寫或小寫)
  • \\w* -0個或多個字母數字或下划線字符。

正則表達式演示

如果只需要變量,請執行以下操作:

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

不過請注意:這僅適用於長度恰好為1個字符的變量。 有關isalpha()更多詳細信息,請參見此處此處

我不確定您要做什么,但是您可以執行以下操作:

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

給出該行中字母字符的列表:

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

這是我做的:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM