如何用正则或递归结合正则将字符串拆分为三层嵌套列表?
生成指定格式的三层嵌套列表
问题说明
给定字符串:
sample_string = 'a,b|a,c;d,e|f,g|a,c;d,e;a,b;f,g'
现有代码通过正则拆分得到两层嵌套列表:
import re lista = [[i for i in re.split("[;]| \W]+", s)] for s in re.split("[|]|,\W]+", sample_string)] # 输出:[['a,b'], ['a,c', 'd,e'], ['f,g'], ['a,c', 'd,e', 'a,b', 'f,g']]
需要转换为三层嵌套列表:
[['a,b'], [['a,c'], ['d,e']], ['f,g'], [['a,c'], ['d,e'], ['a,b'], ['f,g']]]
解决方案
1. 递归结合正则实现(推荐)
核心逻辑是按层级拆分字符串:
- 第一层以
|拆分,得到一级子串 - 对每个一级子串,若包含
;则以;拆分,将每个二级子串单独包装为列表;否则直接包装为列表
代码实现:
import re def build_nested_list(s): # 第一层拆分:按|分割所有顶级片段 top_level = re.split(r'\|', s) nested_result = [] for segment in top_level: # 检查当前片段是否有二级分隔符; if ';' in segment: # 第二层拆分:按;分割,每个元素包裹成子列表 sub_segments = re.split(r';', segment) nested_result.append([[sub] for sub in sub_segments]) else: # 无二级分隔符,直接包裹成列表 nested_result.append([segment]) return nested_result # 测试 sample_string = 'a,b|a,c;d,e|f,g|a,c;d,e;a,b;f,g' print(build_nested_list(sample_string))
运行结果完全符合需求:
[['a,b'], [['a,c'], ['d,e']], ['f,g'], [['a,c'], ['d,e'], ['a,b'], ['f,g']]]
2. 仅用正则的局限性
正则本身只能完成字符串的匹配与捕获,无法直接生成嵌套列表这种数据结构。即使通过正则捕获所有层级的内容,也需要额外的代码逻辑将捕获结果组装成目标嵌套结构,无法仅靠正则一步到位。因此不推荐强行用纯正则实现,递归结合正则的方案逻辑更清晰、易维护。
内容的提问来源于stack exchange,提问作者Wendy Velasquez
相关产品推荐
相关产品推荐

