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

正则提取两个特定模式间含换行的Abstract title内容及工具选择

正则匹配失败原因

你写的正则有两个核心问题:

  • 默认状态下正则元字符.不匹配换行符,所以Abstract title后面跨多行的内容会被截断
  • 最后一个目标块后面没有连续两个换行符,是直接到文件末尾,(?=\n{2})这个正向预查匹配不到,所以最后两个跨多行的块都没正确提取。

通用修正正则模式如下(开启单行模式让.匹配换行,终止条件兼容连续空行和文件结尾):
/Abstract title:(.*?)(?=\n{2}|\Z)/gs

不同工具实现方案

1. grep(效率最高,适合大文件)

GNU grep支持-z参数实现多行匹配,命令如下:

grep -zPo 'Abstract title:(.*?)(?=\n{2}|\Z)' your_file.txt | sed '/^$/d'

说明:grep是C编写的流式处理工具,处理GB级大文件也比脚本语言快1-2个数量级,是纯提取场景的最优选择。

2. awk(性能接近grep,逻辑更简单不易错)

awk可以直接开启段落模式(按空行分割记录),匹配包含Abstract title的段落即可:

awk -v RS='' '/Abstract title/' your_file.txt

说明:RS='' 就是开启段落模式,每个记录是连续的非空行,只要段落里包含Abstract title就输出,不需要写复杂正则,性能和grep差距极小。

3. 脚本语言(JS/Python/R,适合需要后续处理数据的场景)

如果需要把提取结果存为结构化数据做后续分析,可以用脚本语言实现:

  • JS示例:
const fs = require('fs')
const content = fs.readFileSync('your_file.txt', 'utf8')
const result = content.match(/Abstract title:(.*?)(?=\n{2}|\Z)/gs)
console.log(result.join('\n---\n'))
  • R示例:
library(stringr)
content <- readLines("your_file.txt", warn = F) |> paste(collapse = "\n")
result <- str_match_all(content, "Abstract title:(.*?)(?=\\n{2}|\\Z)")[[1]][,2]

说明:处理100MB以内的文件时脚本语言性能差距可以忽略,超大型文件不推荐。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 09:45:02