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

Python如何按加减多分隔符拆分字符串 分别生成对应元素列表

Python拆分带加减号分隔词汇的字符串实现方案

问题场景

给定由+、-作为分隔符拼接词汇的Python字符串,示例如下:

s = "AA + BB + 1C - CC - DD"

需要将字符串拆分后,分别提取加号关联、减号关联的词汇存入两个独立列表,预期输出:

plusList = ["AA", "BB", "1C"]
minusList = ["CC", "DD"]

可用实现方法

方法1:正则匹配(适配性最强)

通过正则表达式统一匹配所有带前置符号的片段,对字符串中空格数量不固定、格式不完全统一的场景兼容性最好,代码如下:

import re

s = "AA + BB + 1C - CC - DD"
plusList = []
minusList = []

# 匹配规则:匹配可选的前置+/-符号,后跟任意非加减号的内容片段
for sign, content in re.findall(r'([+-]?)\s*([^+-]+)', s):
    word = content.strip()
    if not word:
        continue
    if sign == '-':
        minusList.append(word)
    else:
        # 无前置符号、带+号的项统一归入加号列表
        plusList.append(word)

方法2:字符串替换拆分(无额外依赖)

不需要引入任何模块,通过字符串替换统一分隔标记后拆分判断,逻辑直白易读,适合格式固定的场景:

s = "AA + BB + 1C - CC - DD"
plusList = []
minusList = []

# 统一给所有带符号的项前加分隔标记
processed_str = s.replace(" + ", "|+").replace(" - ", "|-")
for item in processed_str.split("|"):
    item = item.strip()
    if not item:
        continue
    if item.startswith("-"):
        minusList.append(item[1:])
    elif item.startswith("+"):
        plusList.append(item[1:])
    else:
        # 字符串开头无符号的项默认属于加号列表
        plusList.append(item)

方法3:分层拆分(逻辑简单易调试)

先按+拆分所有加号关联的块,再对每个块内的-做二次拆分,不需要复杂匹配规则,调试成本低:

s = "AA + BB + 1C - CC - DD"
plusList = []
minusList = []

# 先按加号拆分出所有加号关联的块
plus_blocks = s.split("+")
for block in plus_blocks:
    # 对每个块按减号拆分,过滤空内容
    parts = [p.strip() for p in block.split("-") if p.strip()]
    if not parts:
        continue
    # 块内第一个元素是加号关联项
    plusList.append(parts[0])
    # 块内剩余元素都是减号关联项
    minusList.extend(parts[1:])

以上三种方法执行后,都能得到符合预期的列表结果:

print(plusList)  # ['AA', 'BB', '1C']
print(minusList) # ['CC', 'DD']

注意:如果字符串存在符号前后无空格的写法(如AA+BB-CC),优先选择正则方法,微调匹配规则即可适配;其余两种方法需要对应调整拆分/替换的匹配字符串。

内容的提问来源于stack exchange,提问作者Pradeepta Kumar Khatoi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 00:27:23