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

Python re.findall匹配含换行段落 提取包含指定字符串内容的方法

正确实现方式

方案1:先分段再过滤(更简单易维护,无需复杂正则)

直接按空行拆分文本为独立段落,再过滤包含目标字符串的段落,替换段落内的换行即可:

text = """test textract.

new line
test word.

another line."""
myword = "word"

# 按两个连续换行拆分段落,去除首尾空白
paragraphs = [p.strip() for p in text.split('\n\n')]
# 筛选包含目标词的段落,替换内部换行符为空格
result = [p.replace('\n', ' ') for p in paragraphs if myword in p]
print(result)
# 输出:['new line test word.']

方案2:正则实现

需要解决你之前写法的三个核心问题:

  1. 正则默认.不匹配换行符,需要加re.DOTALL标志开启匹配
  2. 避免用普通捕获组(),否则re.findall会优先返回分组内容而非完整匹配结果,改用非捕获组(?:)
  3. 目标词要加re.escape()转义,避免目标词包含正则特殊字符时报错

代码如下:

import re
text = """test textract.

new line
test word.

another line."""
myword = "word"

matches = re.findall(
    r'(?<=\n\n)(?:.*?' + re.escape(myword) + r'.*?)(?=\n\n)',
    text,
    flags=re.DOTALL
)
# 替换段落内换行
result = [m.strip().replace('\n', ' ') for m in matches]
print(result)
# 输出:['new line test word.']

之前写法失效的原因

  • 未开启re.DOTALL,.无法匹配换行符,跨行的段落内容自然匹配不到
  • 用了普通捕获组(),re.findall优先返回分组内容,导致返回的是空分组结果而非完整段落
  • 错误使用|或逻辑,.|\n会将内容拆分为单个字符匹配,无法拿到完整段落

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 21:36:03