我尝试对一列中的多个字符串进行字符串搜索,但脚本不返回带括号的字符串。
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, paste(d, collapse = "|"))) %>%
group_by(a) %>%
tally()
我希望最后一个脚本返回“Apple”,“Facebook”,“Google(1992)",但它只返回前两个。我可以在“collapse”参数中添加一些东西来包含带括号的字符串吗?
2条答案
按热度按时间falq053o1#
(Per注解,在这种情况下甚至不需要正则表达式。但为了将来的参考:)正如您可能已经知道的那样,在正则表达式中必须对括号进行转义。当您直接指定模式时,这很容易-例如,
str_detect(a, "Google \\(1992\\)")
。但是当模式存储在变量中时,就像在您的情况下一样,它可能稍微有点棘手。您可以将其处理为在替换向量中,我们必须转义左边的括号(
"\\("
)。但是在右边,我们必须转义"\"
--我们使用"\\\\"
插入文字"\\"
。b4wnujal2#
我们可以在
str_detect
中使用fixed
,方法是循环模式并将其减少为单个逻辑向量