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

如何按不同分隔符拆分枚举文本?修复Python函数缺陷

枚举文本拆分问题及解决方法

需求说明

需要拆分包含多种分隔符的枚举类文本,支持的分隔符类型包括:

  • 数字加括号/圆点:如1)、2.
  • 连字符:如-
  • 项目符号:如•

示例输入与期望输出:

  • 输入:"1. 下单 2. 登记订单 3. 撰写结论"
    期望输出:["1. 下单", "2. 登记订单", "3. 撰写结论"]
  • 输入:"- 下单 office-home - 登记订单 - 撰写结论"
    期望输出:["下单 office-home", "登记订单", "撰写结论"]

原函数问题

原函数直接将-作为全局分隔符,会错误拆分文本内部的连字符(如office-home中的-),导致结果不符合预期。

原函数代码:

import re

def split_text(text):
    # 定义不同分隔符的正则模式
    patterns = [
        r'\d+\)|\d+\.',
        r'-',
        r'•',
    ]

    # 合并为单个正则表达式
    pattern = '|'.join(patterns)

    # 按模式拆分文本
    parts = re.split(pattern, text)

    # 移除空内容
    parts = [part.strip() for part in parts if part.strip()]

    return parts

修正方案

核心思路是仅匹配作为枚举项起始标记的分隔符,而非所有同类符号:

  • 数字类分隔符(1)、2.):直接匹配即可,这类符号不会出现在文本中间
  • 连字符-和项目符号•:仅匹配前面是文本开头、空白或标点,且后面跟着空白的情况

版本1:保留枚举前缀(如1.、-)

import re

def split_text(text):
    # 匹配完整枚举项的正则:覆盖数字前缀、-前缀、•前缀的情况
    pattern = r'(?:\d+[).]\s+.+?|- \s+.+?|• \s+.+?)(?=\s*(?:\d+[).]|-|•)\s+|$)'
    # 提取所有匹配项并清理空白
    parts = [match.strip() for match in re.findall(pattern, text) if match.strip()]
    return parts

测试结果:

  • 输入"1. it is necessary to place an order 2. to enter it in the register 3. to write a conclusion"
    输出:["1. it is necessary to place an order", "2. to enter it in the register", "3. to write a conclusion"]
  • 输入"- it is necessary to place an order office-home - enter it in the register - write a conclusion"
    输出:["- it is necessary to place an order office-home", "- enter it in the register", "- write a conclusion"]

版本2:移除-和•前缀,保留数字前缀

如果不需要-和•前缀,可在提取后额外处理:

import re

def split_text(text):
    pattern = r'(?:\d+[).]\s+.+?|- \s+.+?|• \s+.+?)(?=\s*(?:\d+[).]|-|•)\s+|$)'
    raw_parts = [match.strip() for match in re.findall(pattern, text) if match.strip()]
    
    processed_parts = []
    for part in raw_parts:
        # 移除开头的"- "或"• ",保留数字前缀
        if part.startswith(('- ', '• ')):
            processed_parts.append(part[2:].strip())
        else:
            processed_parts.append(part)
    return processed_parts

测试结果:

  • 输入"- it is necessary to place an order office-home - enter it in the register - write a conclusion"
    输出:["it is necessary to place an order office-home", "enter it in the register", "write a conclusion"]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 15:15:36