我认为这可能是一个更简单的正则表达式。
首先,你的变量只能是字母数字,我还没有看到任何其他变量。
所以已经在您的捕获组是这样的:(\w+)
那么,如果能在这之前是一个float,它的确应该看起来像\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']
或者只是使用一个非贪婪的捕获,那么你不需要猜测什么字符是允许的。 – interjay
sry但非贪婪的捕获看起来像什么? – overloading
是这样的:'(。*?)' –