使用栈做括号匹配时无空格表达式如何正确拆分存入列表
无空格算术表达式拆分解决方案
你需要实现的是算术表达式的分词(Tokenize)逻辑,核心是将连续的多位数字识别为一个整体,其余运算符、括号作为单独元素拆分。
方法1:手动遍历实现
逻辑清晰无第三方依赖,适合后续自定义扩展规则:
def tokenize(exp): # 先移除所有空格,同时兼容带空格的输入 exp = exp.replace(' ', '') res = [] num_buf = '' for c in exp: if c.isdigit(): num_buf += c else: # 遇到非数字字符,先把之前累积的数字存入结果 if num_buf: res.append(num_buf) num_buf = '' res.append(c) # 遍历结束后检查末尾是否有剩余的数字未存入 if num_buf: res.append(num_buf) return res # 测试用例 exp = "(2*3)+(4*60)/3" print(tokenize(exp)) # 输出:['(', '2', '*', '3', ')', '+', '(', '4', '*', '60', ')', '/', '3']
方法2:正则表达式快速实现
用正则匹配规则直接拆分,代码更简洁:
import re def tokenize(exp): # 先移除所有空格,匹配规则:连续数字 或 任意非数字字符 exp = exp.replace(' ', '') return re.findall(r'\d+|[^\d]', exp) # 测试用例 exp = "2*3+11+2" print(tokenize(exp)) # 输出:['2', '*', '3', '+', '11', '+', '2']
两种方法都同时兼容带空格和不带空格的输入,不需要单独区分处理两种输入场景,拆分后的结果可以直接用于后续的括号校验、表达式计算逻辑。
内容的提问来源于stack exchange,提问作者Pallab Tewary
相关产品推荐
相关产品推荐

