如何用Python从布尔逻辑表达式中提取变量(附示例)
没问题,这里有一个靠谱的Python方案,能从布尔逻辑表达式里提取变量,完全适配你给出的示例需求:
实现代码
import re def extract_boolean_variables(expression): # 布尔逻辑里的关键字,需要排除在外 boolean_keywords = {'or', 'and', 'not'} # 匹配所有由字母组成的标识符(支持单字母或多字母变量) all_tokens = re.findall(r'\b[A-Za-z]+\b', expression) # 过滤关键字并去重,同时保留变量首次出现的顺序 unique_variables = [] seen_vars = set() for token in all_tokens: if token not in boolean_keywords and token not in seen_vars: seen_vars.add(token) unique_variables.append(token) return unique_variables
测试示例
# 测试你提供的输入表达式 test_expression = "E= A or B or (C and not D)" print(extract_boolean_variables(test_expression)) # 输出结果: ['E', 'A', 'B', 'C', 'D']
方案说明
- 正则匹配逻辑:用
\b[A-Za-z]+\b匹配所有连续的字母序列,这个规则不仅能处理示例里的单个大写字母变量,也支持像UserVar这类多字母的变量名。 - 关键字过滤:专门定义了布尔逻辑的核心关键字集合,确保不会把
or、and、not这类操作符误识别成变量。 - 去重与顺序保留:通过一个集合
seen_vars记录已经加入列表的变量,避免重复;同时按变量在表达式中首次出现的顺序收集结果,和你期望的输出顺序一致。
扩展适配
如果你的变量命名规则更灵活(比如包含数字、下划线),可以把正则表达式改成\b[A-Za-z0-9_]+\b,这样就能匹配像Var_123这类符合常规标识符规则的变量了。
内容的提问来源于stack exchange,提问作者이춘경
相关产品推荐
相关产品推荐

