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

R中使用正则搜索提取BibTeX条目标题字符串的方法

问题修复方案

你原有代码报错的核心原因是两个:一是默认TRE正则引擎下{属于特殊量词字符,你的转义写法不符合引擎规则;二是正则里写了不存在的|字符匹配逻辑,完全无法对应你的BibTeX文本结构。

基础R实现(无需安装额外包)

直接使用sub()完成整列提取即可,正则逻辑专门适配「取={`后第一个}前的内容、忽略后续所有字段」的需求:

data$Title <- sub(".*=\\{([^}]+)\\}.*", "\\1", data$Title)

正则逻辑说明

  • .*:匹配字符串开头到={`标记前的所有内容
  • =\\{:精确匹配定位符={`
  • ([^}]+):捕获组,匹配连续1个及以上的非}字符,遇到第一个}就自动终止匹配,天然适配不同行BibTeX字段数不一致的情况
  • \\}.*:匹配第一个}以及后续所有内容
  • 替换为\\1即输出捕获到的标题文本

用你提供的样例测试,运行结果完全符合预期:

test_bib <- "={Proofs that yield nothing but their validity or all languages in NP have zero-knowledge proof systems},\\n  author={Goldreich, Oded and Micali, Silvio and Wigderson, Avi},\\n  journal={Journal of the ACM (JACM)},\\n  volume={38},\\n  number={3},\\n  pages={690--728},\\n  year={1991},\\n  publisher={ACM New York, NY, USA}\\n}"

sub(".*=\\{([^}]+)\\}.*", "\\1", test_bib)
# 输出:[1] "Proofs that yield nothing but their validity or all languages in NP have zero-knowledge proof systems"

tidyverse 实现(更直观的写法)

如果日常使用stringr包做文本处理,可以用正向预查直接提取目标内容,不需要写替换逻辑:

library(stringr)
data$Title <- str_extract(data$Title, "(?<=\\=\\{)[^}]+")

这里(?<=\\=\\{)表示只匹配前面紧邻={`的文本,后续提取连续非}字符,逻辑更易读,执行效果和基础R写法完全一致。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 15:12:46