在Python源文件中重命名变量和方法名
我正在尝试写一个Python程序,基本上是输入一个原始的Python源文件,然后把所有的变量名都改成“V”,把所有的方法或函数名改成“F”,其他的内容保持不变。我的目标是这样的:
输入:
def gcd(x, y):
"""Sample docstring."""
if x == y:
return x
if x > y:
if y == 0: return x
return gcd(x-y, y)
if y > x:
if x == 0: return y
# Sample comment.
return gcd(x, y-x)
输出:
def F(V, V):
"""Sample docstring."""
if V == V:
return V
if V > V:
if V == 0: return V
return F(V-V, V)
if V > V:
if V == 0: return V
# Sample comment.
return F(V, V)
在这个Python源文件中,其他所有的内容都会保持原样,包括注释、文档字符串等等。我不太确定该怎么做,因为我还希望以后能对Java和C++文件进行类似的处理。(也就是说,把所有变量名改成“V”,把所有函数/方法名改成“F”)。所以,像Python的tokenize模块或ast模块可能不是最好的选择,因为这样我只能处理Python源文件,而不能处理Java或C++文件。
我已经尝试过使用PLY,但问题是我必须指定所有的正则表达式规则和整个Python语法。难道没有更简单的方法可以实现我想做的事情吗?或者如果我计划以后处理Java和C++源代码文件,这就是唯一的办法吗?
如果能得到一些建议或反馈,告诉我最好的解决方案是什么,那就太好了。
1 个回答
1
如果你有这样的代码,可以使用两个正则表达式。一个用来获取函数名,另一个用来获取变量。
如果你使用这个正则表达式:
\w+(?=\()|\b[xy]\b
你会发现它能匹配到你需要的所有内容。
所以,你可以分别使用这两个正则表达式,替换成你想要的内容。第一步是用以下的正则表达式替换函数名:
\w+(?=\()
第二个正则表达式是用来把 X 和 Y 替换成 V:
\b[xy]\b