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

Python如何按连续整数、括号分割字符串得到指定格式列表

字符串分割需求实现

分割规则

  • 在所有整数位置分割,直接相邻的连续整数作为整体保留,不做拆分
  • 在(、)字符位置同步分割字符串

问题复现

测试代码:

import re
myStr = "H12(O1H2)2O2C1"
list1 = re.split('(\d+)', myStr)
print(list1)
list1 = re.split('(\W)', myStr)
print(list1)
  • 预期输出:['H', '12', '(', 'O', '1', 'H', '2', ')', '2', 'O', '2', 'C', '1']
  • 实际执行re.split('(\d+)', myStr)输出:['H', '12', '(O', '1', 'H', '2', ')', '2', 'O', '2', 'C', '1'],左括号与后续字母O被合并为同一个元素,未按要求拆分。对首次分割结果二次分割未生效,且后续字符串为用户动态输入,无法通过固定索引处理固定字符串的方式解决,需要通用实现方案。

实现方案

直接使用re.findall一次性匹配所有需要保留的片段即可,不需要多次调用split。正则规则同时匹配三类目标内容:连续数字、单个括号、连续的非数字非括号字符,天然满足分割要求。
实现代码:

import re

myStr = "H12(O1H2)2O2C1"
res = re.findall(r'\d+|[()]|[^()\d]+', myStr)
print(res)

执行后输出完全符合预期:['H', '12', '(', 'O', '1', 'H', '2', ')', '2', 'O', '2', 'C', '1']

正则逻辑说明

  • \d+:匹配连续数字串,保证连续整数作为整体不拆分
  • [()]:匹配单个左/右括号,保证括号单独作为一个元素分割
  • [^()\d]+:匹配连续的非数字、非括号字符,遇到数字或括号时自然断开,不需要额外处理边界

该方案为通用实现,适配任意动态输入的符合规则的字符串,不依赖固定索引位置,也不需要二次遍历处理分割结果。

内容的提问来源于stack exchange,提问作者Eli Steinerman

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 16:57:16