Python中拆分含数学运算符的字符串问题求助
拆分包含数字、变量与运算符的字符串
要实现将包含数字、变量以及+、-、*、/运算符的字符串拆分,使运算符与操作数分离,推荐两种可靠实现方式:
方法一:正则表达式实现
利用re.findall匹配所有操作数(数字或变量)和运算符,直接得到目标列表:
import re input_str = "100+20+a" # 正则匹配规则:匹配数字、字母变量或运算符 pattern = r'(\d+|[a-zA-Z]+|[+\-*/])' output = re.findall(pattern, input_str) print(output)
运行结果:
["100","+","20","+","a"]
正则表达式说明:
\d+:匹配一个或多个数字(整数)[a-zA-Z]+:匹配一个或多个字母(变量名)[+\-*/]:匹配四则运算符(-需转义避免被当作范围符号)- 括号用于分组,确保每个匹配项单独被提取
方法二:手动遍历字符串实现
如果不想依赖正则,可通过遍历字符串逐个字符判断,收集操作数和运算符:
input_str = "100+20+a" operators = {'+', '-', '*', '/'} output = [] current_token = [] for char in input_str: if char in operators: # 先把当前收集的操作数加入列表 if current_token: output.append(''.join(current_token)) current_token = [] # 加入运算符 output.append(char) else: # 收集操作数的字符 current_token.append(char) # 处理最后一个操作数 if current_token: output.append(''.join(current_token)) print(output)
运行结果同样符合预期。
原代码问题分析
你的代码逻辑存在多处错误:
get_index_of函数中使用enumerate(txt+"+"),额外添加的+会改变原字符串的索引位置,导致索引计算错误- 收集所有运算符索引后,循环中每次将整个当前字符串
x加入列表再截断,完全不符合拆分操作数和运算符的逻辑,因此得到错误结果
内容的提问来源于stack exchange,提问作者Capt.Pyrite
相关产品推荐
相关产品推荐

