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

如何分割文本生成以@Given/@When/@And为块的嵌套列表

文本分割为指定嵌套列表实现

核心逻辑为逐行遍历文本内容,识别@Given/@When/@And三个块起始标记,每碰到一个新标记就新建子列表收集后续内容,直到碰到下一个标记时把已收集的子列表存入总结果,最终得到符合要求的嵌套列表。

Python实现代码

def split_test_blocks(file_path: str) -> list[list[str]]:
    # 配置需要识别的块起始标识
    start_flags = {"@Given", "@When", "@And"}
    final_list = []
    current_block = None

    with open(file_path, 'r', encoding='utf-8') as f:
        for line in f:
            stripped_line = line.strip()
            # 匹配到新的块起始标识
            if stripped_line in start_flags:
                # 先把之前收集完成的块存入总列表
                if current_block is not None:
                    final_list.append(current_block)
                # 初始化新的块,存入当前标识行
                current_block = [line.rstrip('\n')]
            else:
                # 非标识行,追加到当前正在收集的块
                if current_block is not None and line.strip():
                    current_block.append(line.rstrip('\n'))
        # 遍历结束后存入最后一个收集完成的块
        if current_block is not None:
            final_list.append(current_block)
    return final_list

# 调用示例
if __name__ == "__main__":
    Final_List = split_test_blocks("your_target_file.txt")
    # 打印验证输出结构
    for block in Final_List:
        print(block)

运行效果

传入你提供的示例文本,运行后得到的Final_List结构完全匹配预期:

[
    ['@Given', ' User Username{', ' User Userpassowrd ', ' User ID ', ' }'],
    ['@When', 'User Username{', 'User Userpassowrd ', 'User ID ', '}'],
    ['@And', 'User Username{', 'User Userpassowrd ', 'User ID ', '}']
]

可调整配置

  • 如果需要保留文本中的空行,删除代码判断条件里的and line.strip()即可
  • 如果需要新增识别其他起始标记(比如@But、@Then),直接在start_flags集合中添加对应标记字符串即可
  • 如果你的文本文件不是utf-8编码,修改open函数里的encoding参数为对应编码(比如gbk)即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 04:48:34