もっと単純な正規表現にできると思います。
まず第一に、変数は英数字しか使用できません。他のそのような変数はまだ見ていません。
したがって、すでにキャプチャ グループは次のようになっています。(\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']