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

如何用Python正则表达式分割文本为90+字符块并合并短尾块?

用纯正则实现按规则分割文本

纯正则解决方案

要满足你的需求,可使用re.findall配合特定正则表达式,直接匹配出所有符合要求的块(自动合并最后不足90字符的部分),无需后续修改列表。

正则表达式与代码示例

import re

# 示例长文本
long_text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. " * 5 + "This is a short ending part."

# 核心正则
pattern = r'(?s)(?:^|(?<=\s))(.{90,}?)(?=\s(?:.{90,}|$)|$)'
blocks = re.findall(pattern, long_text)

# 输出结果
for i, block in enumerate(blocks, 1):
    print(f"块{i}长度: {len(block)}")
    print(block)
    print("---")

正则说明

  • (?s):开启单行模式,让.匹配换行符,支持带换行的文本分割
  • (?:^|(?<=\s)):匹配文本开头或空格后的位置,确保分割仅在空格/换行处进行,不会拆分单词
  • (.{90,}?):非贪婪匹配至少90个字符,避免过度匹配
  • (?=\s(?:.{90,}|$)|$):正向预查控制分割逻辑:
    • 若当前位置后是空格,且空格后还有至少90字符,则在这里分割
    • 否则直接匹配到文本结尾,自动将最后不足90的部分合并到前一个块中

非正则高效方案(避免逐字符搜索)

如果接受非正则方案,可借助textwrap模块实现,仅需少量后续调整:

import textwrap

def split_long_text(text, min_len=90):
    # 先按90宽度分割为块
    chunks = textwrap.fill(text, width=min_len).split('\n')
    # 合并最后一个不足长度的块
    if len(chunks) >= 2 and len(chunks[-1]) < min_len:
        chunks[-2] += ' ' + chunks.pop()
    return chunks

# 使用示例
result = split_long_text(long_text)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 03:22:08