Python不使用内置函数和正则将表达式字符串转列表的问题
实现方案
核心思路是逐个遍历表达式字符串的字符,临时缓存连续的数字字符,遇到非数字的符号(括号、运算符)时,先把缓存的数字(如果有)存入结果列表,再将符号存入列表,遍历结束后检查是否还有未存入的剩余数字。
实现代码
def expr_to_list(expr_str): result = [] current_num = '' for char in expr_str: # 判断当前字符是否为数字 if '0' <= char <= '9': current_num += char else: # 先把之前拼接的数字存入列表 if current_num: result.append(current_num) current_num = '' # 存入当前符号 result.append(char) # 遍历结束后处理末尾可能剩余的数字 if current_num: result.append(current_num) return result # 测试示例 test_expr = "(52^2)+150-(2^2+4+5)" print(expr_to_list(test_expr))
输出结果
运行上述代码后输出与预期完全一致:["(", "52", "^", "2", ")", "+", "150", "-", "(", "2", "^", "2", "+", "4", "+", "5", ")"]
说明
- 全程没有使用正则表达式,也没有依赖
split这类会拆分字符的字符串方法,仅用基础遍历和字符判断实现 - 自动识别任意长度的连续数字,不会出现多位数被拆分的问题
- 支持加减乘除、幂运算、括号等所有单字符运算符的表达式拆分
内容的提问来源于stack exchange,提问作者delux
相关产品推荐
相关产品推荐

