我认为它可以是一个更简单的正则表达式。
首先,您的变量只能是字母数字字符,我还没有见过其他类型的变量。
因此,您的捕获组看起来像这样:(\w+)
然后,如果在变量前面的唯一内容是浮点数,则应该看起来像这样\b(?:float\s+)?
但实际上,这就是我们需要的全部。
唯一遗漏的是,在尝试一次性读取所有内容时,需要读取到行末,否则如果逐行读取则不需要: .*\n
因此,您的整个正则表达式可以是:\b(?:float\s+)?(\w+).*\n
一旦正则表达式达到一个非字母数字字符(例如空格、等号或其他任何字符),它将停止成为捕获组的一部分。
:)
运行我提到的正则表达式在您的示例上:
>>> import re
>>> re.findall(r'\b(?:float\s+)?(\w+).*\n', "a = a/2;\nb*= a/4*2;\nfloat c += 4*2*sin(2);\n")
['a', 'b', 'c']
逐行运行代码:(^
表示正则表达式从字符串开头开始匹配。)
>>> re.findall(r'^(?:float\s+)?(\w+)', "a = a/2")
['a']
>>> re.findall(r'^(?:float\s+)?(\w+)', "b*= a/4*2")
['b']
>>> re.findall(r'^(?:float\s+)?(\w+)', "float c += 4*2*sin(2)")
['c']