在Python源文件中重命名变量和方法名称

时间:2014-08-28 18:30:44

标签: python regex python-3.x

我试图编写一个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 ++文件进行处理。 (I.E.将所有变量名称更改为V,将所有函数/方法名称更改为F)。因此,使用类似Python标记化模块或Python ast模块的东西可能不是最佳选择,因为这将限制我只能处理Python源文件,而不能处理Java或C ++文件。

我已经尝试过使用PLY,但问题是,我必须指定所有正则表达式规则和整个Python语法。必须有一种更简单的方法来实现我想要做的事情?或者,如果我计划在稍后阶段处理Java和C ++源代码文件,那么这是唯一可行的方法吗?

如果我能得到一些关于最佳选择的想法或反馈,那将会非常棒。

1 个答案:

答案 0 :(得分:0)

如果您有这种代码,可以使用两个正则表达式。一个获取函数名称,另一个获取变量。

如果你使用这个正则表达式:

\w+(?=\()|\b[xy]\b

<强> Working demo

您可以看到它符合您所需的一切。

因此,您可以分开使用两个正则表达式来替换您想要的内容。第一步是使用以下函数替换函数:

\w+(?=\()

第二个正则表达式是用V代替X和Y:

\b[xy]\b

enter image description here

第一个正则表达式:

enter image description here

第二个正则表达式:

enter image description here