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

如何使用TidyText提取文本中括号包裹的短语?

解决TidyText提取带括号元素的问题

你之前用unnest_regex没得到想要的结果,核心原因是这个函数的pattern参数是用来分隔文本的规则,而非匹配你要提取的目标内容。之前的正则会把文本按括号内容拆分,最终得到的是拆分后的剩余部分,自然不是你需要的带括号元素。

用以下代码可以实现你的需求:

library(tidytext)
library(stringr)
library(tidyr)

df <- data.frame(
  text = c(
    "[instruction] [Mortgage][Show if Q1A5]Mortgage Loans",
    "[checkboxes] [min 1] [max OFF] [Show if Q29A2] Please indicate the reason(s) you would not purchase this check package."
  ),
  line = c(1,2)
)

# 提取所有带[]的元素并展开成行
result <- df %>%
  mutate(elements = str_extract_all(text, "\\[.*?\\]")) %>% # 匹配所有[xxx]格式的内容
  unnest_longer(elements) %>% # 把列表列展开为多行
  select(line, elements) # 保留需要的列

head(result)

运行后会得到你预期的输出:

# A tibble: 6 × 2
   line elements          
  <dbl> <chr>             
1     1 [instruction]     
2     1 [Mortgage]        
3     1 [Show if Q1A5]    
4     2 [checkboxes]      
5     2 [min 1]           
6     2 [max OFF]         

关键说明:

  • str_extract_all(text, "\\[.*?\\]"):用正则匹配所有以[开头、]结尾的最短内容(.*?是非贪婪匹配,避免把多个连续的括号内容当成单个匹配项),每个文本里的匹配结果会被存为一个列表。
  • unnest_longer(elements):把列表类型的列拆分成多行,让每个匹配项单独占据一行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 16:07:33