You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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)

运行结果同样符合预期。

原代码问题分析

你的代码逻辑存在多处错误:

  1. get_index_of函数中使用enumerate(txt+"+"),额外添加的+会改变原字符串的索引位置,导致索引计算错误
  2. 收集所有运算符索引后,循环中每次将整个当前字符串x加入列表再截断,完全不符合拆分操作数和运算符的逻辑,因此得到错误结果

内容的提问来源于stack exchange,提问作者Capt.Pyrite

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 22:25:25