正则按段落拆分关键在于识别两个及以上连续换行符(含空白),推荐使用 re.split(r'(?:\n\s*){2,}', text) 并 strip 后过滤空字符串,兼顾中英文及不规则格式。

直接用正则按段落拆分,关键是识别段落之间的“空白分隔”——不是单个换行符,而是两个及以上连续换行符(含空格、制表符等空白),或者带缩进/空行的自然断点。
识别标准空行分隔
多数规整文本(如纯文本文档、Markdown正文)用两个或更多换行符分隔段落。此时最简方案是:
- 用 re.split(r'\n\s*\n', text.strip()) —— 匹配一个换行符 + 任意空白(包括空格、制表符、零个或多个换行)+ 再一个换行符
- 对结果逐项 .strip() 去首尾空白,并过滤掉空字符串
- 这样能兼容
\n\n、\n \n、\n\t\n等常见变体
处理带缩进或不规则换行
有些文本段落末尾有空格或制表符,或段间存在单行注释、分隔线(如 ---)。这时需增强模式:
- 用 re.split(r'(?:\n\s*){2,}', text) ——
(?:...){2,}表示“空白换行组合”重复两次以上,更鲁棒 - 若需保留段落编号或标题行(如“1. 引言”后紧跟内容),可在 split 前先用 re.sub() 统一规范化换行,例如把所有
\r\n和\r替换为\n - 避免误切:不建议用
\n+单独匹配,它会把段内换行(如诗歌、代码块)也切开
适配中文排版习惯
中文文本常无空行,靠首行缩进(如两个全角空格)或段首标点区分。此时正则需转向语义特征:
- 用 re.split(r'(? —— 在句末标点后、下一个汉字前切分(适合无空行但标点规范的场景)
- 更稳妥做法:先按空行粗分,再对每段内长文本做二次句切(如用
PySBD或自定义句末标点规则),不强求一步到位 - 注意:纯正则无法可靠识别“人物对话引号内换行”,这类需结合 NLP 工具或人工规则补正
实际可用的一行式函数
封装成简洁工具函数,兼顾健壮与易读:
import redef split_paragraphs(text):
parts = re.split(r'(?:\n\s*){2,}', text.strip())
return [p.strip() for p in parts if p.strip()]











