求助:无法找到解析文本文件识别段落的正确RegEx
解析文本识别段落的正则表达式解决方案
看起来你现在卡在段落识别的正则上了,我来帮你捋捋。你当前用的[\n]+其实问题在于:它会把**任何连续的换行(哪怕是单个)**都当成段落分隔符,但很多时候文本里的单个换行只是排版需要(比如为了适应宽度换行),并不是真正的段落结束,这就会导致一个完整的段落被拆成好几块。
正确的正则选择(分场景)
根据常见的文本段落分隔规则,给你两种最实用的方案:
场景1:段落以「空白行」分隔(最通用)
大部分文本里,真正的段落分隔是两个及以上连续的换行符(也就是空白行),单个换行属于段落内的换行。对应的正则是:
\n{2,}
如果考虑空白行前后可能有空格、制表符等空白字符,可以优化为:
\s*\n{2,}\s*
示例代码(以Python为例):
import re # 你的示例文本 sample_text = """Das Pensionat Klinger war bereits etwas zusammengeschmolzen, als das junge Ehepaar daselbst eintrat. Es war ein unfreundlicher, regnerischer Sommer gewesen. Klagen überall ... aus der Schweiz -- vom Salzkammergut her, wo der berüchtigte »Schnürlregen« tagaus tagein herabgoß -- Klagen vom Ostseestrande und aus dem Engadin ... Klagen endlich auch aus dem lie...""" # 用空白行分割段落 paragraphs = re.split(r'\s*\n{2,}\s*', sample_text.strip()) # 处理段落内的单个换行(可选,把换行换成空格) cleaned_paragraphs = [re.sub(r'\n', ' ', para) for para in paragraphs] # 输出结果 for idx, para in enumerate(cleaned_paragraphs, 1): print(f"段落 {idx}: {para}")
场景2:段落以「句子结束标点+换行」分隔
如果你的文本里,段落内不会有跨行的句子(即句子结束后才换行),可以用正向断言匹配句子结束标点(句号、感叹号、问号)后的换行:
(?<=[.!?])\s*\n
这个正则会匹配紧跟在标点后的换行,把每个完整句子所在的块识别为段落(适合句子就是段落的场景)。
为什么你的原正则不行?
[\n]+匹配的是一个或多个连续换行,这意味着哪怕是段落内的单个换行也会被当成分隔符,直接把一个完整段落拆碎,这显然不是你想要的效果。
内容的提问来源于stack exchange,提问作者mjosh




