如何将无空格的等式字符串拆分为指定格式的列表?
解决方案
可以通过跟踪当前字符所属的组类型来实现拆分,核心是区分三类元素:
- 变量:以字母开头,后续可跟字母/数字
- 数字:纯数字序列
- 运算符/符号:非字母数字的单个字符
实现代码
def split_expression(s): result = [] current = [] # 标记当前组的类型:'var'(变量)、'num'(数字)、None(初始/待确定) current_type = None for char in s: if char.isalnum(): if char.isalpha(): # 当前字符是字母,判断当前组状态 if current_type is None: current_type = 'var' current.append(char) elif current_type == 'var': current.append(char) elif current_type == 'num': # 数字组结束,先存数字,再开新变量组 result.append(''.join(current)) current = [char] current_type = 'var' else: # 字符是数字 if current_type is None: current_type = 'num' current.append(char) elif current_type == 'num': current.append(char) elif current_type == 'var': # 变量组允许带数字后缀,直接追加 current.append(char) else: # 遇到非字母数字,先存当前组(如果有的话) if current: result.append(''.join(current)) current = [] current_type = None # 存当前符号 result.append(char) # 处理最后一组未存入的元素 if current: result.append(''.join(current)) return result # 测试示例 print(split_expression('b123+xyz=1+z1$')) # 输出: ['b123', '+', 'xyz', '=', '1', '+', 'z1', '$']
逻辑说明
- 用
current暂存正在拼接的元素,current_type标记当前元素的类型 - 遍历每个字符时:
- 字母数字类:如果是字母,若当前在数字组则先收尾数字组,再开变量组;如果是数字,变量组可直接追加,数字组则继续拼接
- 非字母数字类:先把当前拼接好的元素存入结果,再单独存入这个符号
- 遍历结束后,别忘了把最后一组未处理的元素加入结果
这种方式能精准区分变量、纯数字和独立符号,完全匹配你需要的拆分效果。
内容的提问来源于stack exchange,提问作者besusdd
相关产品推荐
相关产品推荐

