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

如何用正则或递归结合正则将字符串拆分为三层嵌套列表?

生成指定格式的三层嵌套列表

问题说明

给定字符串:

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 00:43:09