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
相关产品推荐
相关产品推荐

