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

R基础提取PDF文本后,正则匹配指定字符串报错求助

解决R中提取换行后空格后字符串的正则问题

问题诊断

你的代码报错核心原因有两个:

  1. R基础正则默认不支持反向预查((?<=...))语法,必须通过perl=TRUE开启Perl兼容模式;
  2. 原正则仅匹配单个单词字符\\w,无法捕获完整的目标字符串。

修正方案

方案1:反向预查+完整单词匹配(需Perl模式)

这个方案贴合你原本的思路,通过反向预查定位换行+空格的位置,再匹配其后的完整单词:

texte <- "What I don't want\n       WHATIWANT\n OtherStuff I don't want \n I don't want this either."
# 匹配换行+任意空格后的连续单词字符
regex <- "(?<=\\n\\s+)\\w+"
# 必须开启perl=TRUE才能使用反向预查
debut <- gregexpr(regex, texte, perl = TRUE)
# 提取匹配到的内容
regmatches(texte, debut)

运行结果:[1] "WHATIWANT" "OtherStuff" "I"

方案2:无预查的捕获组方案(纯基础R)

如果不想依赖Perl正则,可直接用捕获组定位目标内容,再剥离前缀:

texte <- "What I don't want\n       WHATIWANT\n OtherStuff I don't want \n I don't want this either."
# 匹配换行+空格+目标单词,用括号捕获目标部分
regex <- "\\n\\s+(\\w+)"
debut <- gregexpr(regex, texte)
# 提取捕获的内容
sapply(regmatches(texte, debut)[[1]], function(x) sub("^\\n\\s+", "", x))

同样能得到和方案1一致的结果。

方案3:提取换行后整行内容(若需完整行)

如果你的需求是获取换行+空格后的整行内容(而非仅第一个单词),调整正则即可:

regex <- "(?<=\\n\\s+).*?(?=\\n|$)"
debut <- gregexpr(regex, texte, perl = TRUE)
regmatches(texte, debut)

运行结果:[1] "WHATIWANT" "OtherStuff I don't want " "I don't want this either."

补充说明

  • 若目标字符串包含非单词字符(如标点、特殊符号),把正则中的\\w+替换为[^\\n]+,即可匹配任意非换行的连续字符;
  • 处理多PDF时,可将上述逻辑封装为函数,循环读取每个PDF提取的文本后批量处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 06:35:24