You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

求助:无法找到解析文本文件识别段落的正确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

火山引擎 最新活动