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

如何在R中反转正则表达式以匹配关键词之外的所有文本

R语言正则捕获关键词前后及之间文本的方案

你之前使用的[^UHJ|uhj|...]属于字符组取反,仅能匹配单个字符,无法实现“排除整个关键词”的需求,所以达不到预期效果。以下是两种可灵活适配未来关键词变动的解决方案:

方案一:拆分文本获取所有片段

将关键词定义为可扩展的向量,通过str_split按关键词拆分文本,直接得到关键词之前、之间、之后的所有文本片段:

# 定义可扩展的关键词向量(后续只需在此添加/删除关键词)
keywords <- c("UHJ", "AXY", "YUI", "OPL", "UJI")
# 构建忽略大小写的正则匹配模式
pattern <- paste0("\\b(", paste(keywords, collapse = "|"), ")\\b", "(?i)")

# 示例长文本
sample_text <- "这是UHJ之前的文本,中间是AXY和yui之间的内容,最后是OPL之后的部分"

# 拆分文本并过滤空字符串
split_result <- stringr::str_split(sample_text, pattern)[[1]]
split_result <- split_result[split_result != ""]

# 输出结果
print(split_result)

运行后输出:

[1] "这是"                "之前的文本,中间是"  "和"                 
[4] "之间的内容,最后是"  "之后的部分"

方案二:正则匹配直接提取目标文本

使用str_extract_all结合否定前瞻/后顾,匹配所有不包含关键词的文本片段:

library(stringr)

keywords <- c("UHJ", "AXY", "YUI", "OPL", "UJI")
# 构建忽略大小写的否定匹配模式
pattern <- paste0("(?<!", paste(keywords, collapse = "|"), ")(?:(?!", paste(keywords, collapse = "|"), ").)*", "(?i)")

sample_text <- "这是UHJ之前的文本,中间是AXY和yui之间的内容,最后是OPL之后的部分"
extract_result <- str_extract_all(sample_text, pattern)[[1]]
extract_result <- extract_result[extract_result != ""]

# 输出结果
print(extract_result)

方案优势

  • 可扩展性强:后续只需修改keywords向量添加或删除关键词,无需调整正则核心逻辑
  • 大小写兼容:通过(?i)标记实现大小写不敏感匹配,无需重复写入关键词的大小写变体
  • 容错性高:若关键词包含正则特殊字符(如.、*),可通过stringr::regex(fixed = TRUE)或转义处理避免解析错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 00:10:48