2024-04-25 16:47:54 发布
网友
我有一个if条件作为字符串,希望提取变量名。 例1:
Input: "((a>5 and b<20) or (c>30))" Output: {"a", "b", "c"}
例2:
Input: "a==20" Output: {"a"}
仅提取变量名的最佳方法是什么? 正则表达式是否适用于此?条件可以是任意长度。 我还考虑过在空格上拆分,然后删除不需要的字符,直到只得到变量名
任何类似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'),则可能会错误地将其识别为变量
'abc'
任何类似Python的标识符都符合定义良好的正则表达式:
只要您没有带引号的字符串,就可以在表达式中找到所有标识符,然后删除所有关键字(关键字列表已关闭),例如:
请注意,如果存在常量字符串(例如,
'abc'
),则可能会错误地将其识别为变量相关问题 更多 >
编程相关推荐