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

使用R语言stringr包str_match函数提取文献条目标题时的正则表达式报错问题求助

解决str_match提取文献标题的正则报错问题

嘿,我帮你定位到问题根源啦!你遇到的U_REGEX_BAD_INTERVAL报错,是因为正则里的大括号{没转义——在正则语法里,{是量词(比如{2,3}表示匹配2-3次)的起始标记,直接写title={会让正则引擎误以为你要定义量词,可后面的内容不符合量词的格式,自然就报错了。

修复后的代码方案

咱们把字面量的{和}都转义,再调整正则逻辑精准匹配目标内容:

library(stringr)

# 你的示例数据
a2 <- "@article{2020, title={Long noncoding RNA MEG3 decreases the growth of head and neck squamous cell carcinoma by regulating the expression of miR‐421 and E‐cadherin}, volume={9}, ISSN={2045-7634}, url={http://dx.doi.org/10.1002/cam4.3002}, DOI={10.1002/cam4.3002}, number={11}, journal={Cancer Medicine}, publisher={Wiley}, author={Ji, Yefeng and Feng, Guanying and Hou, Yunwen and Yu, Yang and Wang, Ruixia and Yuan, Hua}, year={2020}, month={Apr}, pages={3954–3963} }"

# 转义大括号后的正则
match_result <- str_match(a2, "(?s)title=\\{\\s*(.*?)\\s*\\},")
# 提取捕获到的标题内容
title_text <- match_result[, 2]
print(title_text)

正则片段解释

  • (?s):开启单行模式,让.能匹配换行符(兼容可能的多行文献条目)
  • title=\\{:匹配字面量的title={,\\{是转义后的大括号
  • \\s*:匹配标题前后的空白字符(处理可能的空格)
  • (.*?):非贪婪匹配任意字符,专门捕获标题核心内容
  • \\s*\\},:匹配标题结尾的},,同样转义大括号\\}

更简洁的替代写法

如果你的文献条目格式很统一,还可以用正向/反向断言直接提取,不用处理捕获组:

title_text <- str_extract(a2, "(?<=title=\\{\\s).*?(?=\\s*\\},)")

这里:

  • (?<=title=\\{\\s):正向断言,定位到title={(带空格)之后的位置
  • (?=\\s*\\},):反向断言,定位到},(前可带空格)之前的位置
  • .*?:非贪婪捕获中间的标题文本,直接得到结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 16:33:11