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

如何使用str_detect匹配包含括号的字符串?

问题原因

括号()是正则表达式中的特殊元字符,用于定义捕获组。你的代码直接拼接字符串生成正则模式时,"Google (1992)"会被正则引擎解析为"Google "加上一个捕获组(1992),而非字面意义的括号,因此无法匹配原字符串。

解决方案

有两种简单的修复方式:

方式一:使用固定文本匹配

用fixed()函数告诉str_detect把整个匹配模式当作固定文本,忽略正则元字符的特殊含义:

a <-  c("Apple", "Facebook", "Google (1992)")
b <- c(1, 2, 3)

c <-  data.frame(a, b)

d <- c %>% 
  distinct(a) %>% 
  pull()

c %>% 
  filter(str_detect(a, fixed(paste(d, collapse = "|")))) %>% 
  group_by(a) %>% 
  tally()

方式二:转义正则特殊字符

用stringr::str_escape()逐个转义每个字符串中的正则特殊字符,再拼接成正则模式,这样括号会被转义为\(和\),正则引擎会当作字面字符处理:

a <-  c("Apple", "Facebook", "Google (1992)")
b <- c(1, 2, 3)

c <-  data.frame(a, b)

d <- c %>% 
  distinct(a) %>% 
  pull() %>%
  str_escape()

c %>% 
  filter(str_detect(a, paste(d, collapse = "|"))) %>% 
  group_by(a) %>% 
  tally()

两种方法都能让你得到包含"Google (1992)"的预期结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 11:47:10