我认为它可以是一个更简单的正则表达式。
首先,您的变量只能是字母数字,我还没有看到任何其他类似的变量。
所以你的捕获组已经是这样的了:(\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']