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

5 投票
1 回答
2522 浏览
提问于 2025-04-18 18:53

我正在尝试写一个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

在这里输入图片描述

第一个正则表达式:

在这里输入图片描述

第二个正则表达式:

在这里输入图片描述

撰写回答