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

如何用R提取不同模式前后及中间的字符串并存储?

从DataFrame列中提取多模式关键词的解决方案

核心思路

直接通过正则匹配所有符合关键词特征的内容:关键词是不包含 /、[、]、- 和空格的连续字符序列,这种方式能覆盖你给出的所有字符串模式。

单个字符串测试

先针对你的示例字符串验证效果:

library(stringr)

# 示例1
a <- "keyword1 / keyword2 [keyword3 - keyword4 - keyword5 - keyword6][keyword7]"
# 提取所有关键词
str_extract_all(a, "[^/\\[\\]-\\s]+")[[1]]
# 输出结果:
# [1] "keyword1" "keyword2" "keyword3" "keyword4" "keyword5" "keyword6" "keyword7"

# 示例2
b <- "keyword1[keyword3]"
str_extract_all(b, "[^/\\[\\]-\\s]+")[[1]]
# 输出结果:
# [1] "keyword1" "keyword3"

应用到DataFrame

假设你的DataFrame结构如下:

df <- data.frame(
  text = c(
    "keyword1 / keyword2 [keyword3 - keyword4 - keyword5 - keyword6][keyword7]",
    "keyword1[keyword3]"
  )
)

方式1:将提取结果存储为列表列

保留每行对应的关键词列表:

library(dplyr)

df <- df %>%
  mutate(keywords = str_extract_all(text, "[^/\\[\\]-\\s]+"))

# 查看列表列结果
df$keywords
# [[1]]
# [1] "keyword1" "keyword2" "keyword3" "keyword4" "keyword5" "keyword6" "keyword7"
# 
# [[2]]
# [1] "keyword1" "keyword3"

方式2:展开为多行DataFrame

如果需要将每个关键词单独占一行:

library(dplyr)
library(tidyr)

df_expanded <- df %>%
  mutate(keywords = str_extract_all(text, "[^/\\[\\]-\\s]+")) %>%
  unnest(keywords)

# 查看展开后的结果
print(df_expanded)
#                                                                 text  keywords
# 1 keyword1 / keyword2 [keyword3 - keyword4 - keyword5 - keyword6][keyword7] keyword1
# 2 keyword1 / keyword2 [keyword3 - keyword4 - keyword5 - keyword6][keyword7] keyword2
# 3 keyword1 / keyword2 [keyword3 - keyword4 - keyword5 - keyword6][keyword7] keyword3
# 4 keyword1 / keyword2 [keyword3 - keyword4 - keyword5 - keyword6][keyword7] keyword4
# 5 keyword1 / keyword2 [keyword3 - keyword4 - keyword5 - keyword6][keyword7] keyword5
# 6 keyword1 / keyword2 [keyword3 - keyword4 - keyword5 - keyword6][keyword7] keyword6
# 7 keyword1 / keyword2 [keyword3 - keyword4 - keyword5 - keyword6][keyword7] keyword7
# 8                                                  keyword1[keyword3] keyword1
# 9                                                  keyword1[keyword3] keyword3

补充说明

如果你的关键词包含.、_这类特殊字符,上述正则依然适用;如果关键词有其他自定义规则,只需调整正则表达式中的排除字符即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 05:10:37