gpt4 book ai didi

用于模块级常量的 Python 正则表达式

转载 作者:太空宇宙 更新时间:2023-11-03 13:51:30 25 4
gpt4 key购买 nike

我回顾和展望了我的问题的可能解决方案,但我想我今天的 google-fu 很差。更不用说我对正则表达式的了解接近于零了。

我正在尝试仅使用文本处理从一系列 Python 文件中检索某些“常量”(即模块级全局变量)的定义。基本上,我阅读了 Python 文件的整个文本,然后对文本应用正则表达式以找出这些“常量”在哪里/是什么。

例如,我可以在我的 Python 文件中包含如下内容:

CONSTANT_ONE   = 0    # standard
CONSTANT_RIGHT = 1 # rotation of 90 on the right
CONSTANT_LEFT = 2 # rotation of 90 on the left

我发现这个正则表达式可以正常提取变量 names:

re.compile('^(\w+)[ \t]*=', re.M)

然而,它严重地失败了,像这样的声明:

NAME1, NAME2 = 0, None
CONST_1, CONST_2, CONST_3 = range(3)

有什么方法可以修改我的正则表达式来处理这两种情况?如果这是一个非常基本的问题,我很抱歉,但我真的不是正则表达式的专家......

提前谢谢你。

安德里亚。

最佳答案

不要使用正则表达式,而是使用 Python 的解析器。它要简单得多:

class TargetExtractor(ast.NodeVisitor):
def visit_Name(self, node):
if isinstance(node.ctx, ast.Store):
print node.id
def visit_FunctionDef(self, node):
pass
def visit_ClassDef(self, node):
pass

TargetExtractor().visit(ast.parse("a, b = 2, 3; c = d"))

打印

a
b
c

除了字符串,您还可以将文件的全部内容传递给 ast.parse()

关于用于模块级常量的 Python 正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7915732/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com