解析if条件以提取变量名的最佳方法

2024-04-25 16:47:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个if条件作为字符串,希望提取变量名。
例1:

Input: "((a>5 and b<20) or (c>30))"
Output: {"a", "b", "c"}

例2:

Input: "a==20"
Output: {"a"}

仅提取变量名的最佳方法是什么?
正则表达式是否适用于此?条件可以是任意长度。
我还考虑过在空格上拆分,然后删除不需要的字符,直到只得到变量名


Tags: orand方法字符串inputoutputif条件
1条回答
网友
1楼 · 发布于 2024-04-25 16:47:54

任何类似Python的标识符都符合定义良好的正则表达式:

ident = "[a-zA-Z_][a-zA-Z_0-9]*"

只要您没有带引号的字符串,就可以在表达式中找到所有标识符,然后删除所有关键字(关键字列表已关闭),例如:

keywords = {"and", "or"} # Expand as needed
s = "((a>5 and b<20) or (c>30))"
[i for i in re.findall(ident, s) if i not in keywords]
#['a', 'b', 'c']

请注意,如果存在常量字符串(例如,'abc'),则可能会错误地将其识别为变量

相关问题 更多 >