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

如何在R中将Web of Science高级检索查询转换为正则表达式

WoS高级检索语句自动转正则表达式的方法

有可直接落地的实现方案,核心思路是通过语法映射规则,把WoS检索逻辑对应到正则语法,也可以直接封装为函数实现批量自动转换。

核心转换规则

  • 先剥离字段限定前缀(如示例中的TI = ),仅处理后续括号内的检索逻辑部分
  • 检索词的双引号直接保留(如需匹配精确短语),如果检索词包含正则特殊字符(.、*、+、?等),需先做转义处理避免正则解析错误
  • 逻辑运算符OR直接替换为正则中的或运算符|,需注意将OR连接的一组内容放在括号内保证优先级正确
  • 逻辑运算符AND替换为正则的正向肯定预查结构(?=.*检索内容),所有AND连接的预查结构拼接后,前后补充^和.*$即可实现同时命中所有检索条件的效果

示例转换效果

你给出的WoS检索语句:

TI = ("ecology" AND ("climate change" OR "biodiversity"))

按上述规则转换后得到的正则表达式为:

^(?=.*ecology)(?=.*(climate change|biodiversity)).*$

转换后可直接在R的str_detect中使用,和你给出的多条件&连接的写法效果完全一致:

# 两种写法效果完全相同
str_detect(TI,"ecology") & str_detect(TI,"climate change|biodiversity")
str_detect(TI, "^(?=.*ecology)(?=.*(climate change|biodiversity)).*$")

简易R实现函数

你可以直接使用下面的封装函数实现基础的WoS语句到正则的自动转换:

library(stringr)

wos_to_regex <- function(wos_query) {
  # 剥离字段限定前缀
  logic_part <- sub("^[A-Z]+\\s*=\\s*", "", wos_query)
  # 转义正则特殊字符
  logic_part <- str_replace_all(logic_part, "([\\.\\*\\+\\?\\|\\{\\}\\(\\)\\[\\]\\\\\\^\\$])", "\\\\\\1")
  # 替换OR运算符为|
  logic_part <- str_replace_all(logic_part, "\\s+OR\\s+", "|")
  # 拆分所有AND连接的检索项
  and_items <- str_split(logic_part, "\\s+AND\\s+")[[1]]
  # 转换为正向预查结构
  pre_checks <- paste0("(?=.*", and_items, ")", collapse = "")
  # 拼接完整正则,去除多余的双引号
  full_regex <- str_replace_all(paste0("^", pre_checks, ".*$"), '\\"', "")
  return(full_regex)
}

# 调用测试
wos_query <- 'TI = ("ecology" AND ("climate change" OR "biodiversity"))'
wos_to_regex(wos_query)
# 输出:^(?=.*ecology)(?=.*(climate change|biodiversity)).*$

扩展说明

如果需要支持WoS更复杂的检索语法,只需要补充对应的映射规则即可:

  • 通配符*可映射为正则的.*,?映射为正则的.{1}
  • 邻近运算符NEAR/n可映射为\\s+(?:\\w+\\s+){0,n},实现两个检索词间隔不超过n个词的效果
  • 同字段运算符SAME可根据需求调整为对应字段内的匹配逻辑即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 12:09:04