如何用str_detect区分字符串中的a1与a11?
精准匹配独立的"a1"和"a11"
1. 仅匹配独立的"a1"
你的向量元素是用|分隔的多组条目,要精准匹配独立的a1(排除a11、a14这类包含a1但并非独立项的字符串),可以通过正则表达式锁定a1作为单独项的场景——它要么是字符串首尾,要么被|包裹。用stringr包的str_detect实现:
library(stringr) abc <- c("a1","a1|a11","a14","a11", "a11|a14", "a1|a3|a14", "a11|a16") # 匹配包含独立a1的元素 str_detect(abc, "(^|\\|)a1($|\\|)")
运行结果为:TRUE TRUE FALSE FALSE FALSE TRUE FALSE,对应向量中第1、2、6个元素确实包含独立的a1。
也可以用词边界\\b简化正则,效果一致:
str_detect(abc, "\\ba1\\b")
2. 同时检测"a1"或"a11"的存在
如果要筛选出包含独立a1或独立a11的元素,把两个匹配条件用|合并即可:
str_detect(abc, "(^|\\|)a1($|\\|)|(^|\\|)a11($|\\|)")
运行结果为:TRUE TRUE FALSE TRUE TRUE TRUE TRUE,覆盖所有符合条件的元素。
3. 分别标记a1和a11的存在
如果需要分别查看每个元素是否包含a1、是否包含a11,可以生成两个逻辑向量并组合展示:
has_a1 <- str_detect(abc, "(^|\\|)a1($|\\|)") has_a11 <- str_detect(abc, "(^|\\|)a11($|\\|)") # 组合成数据框直观查看 data.frame(abc, has_a1, has_a11)
输出结果:
abc has_a1 has_a11 1 a1 TRUE FALSE 2 a1|a11 TRUE TRUE 3 a14 FALSE FALSE 4 a11 FALSE TRUE 5 a11|a14 FALSE TRUE 6 a1|a3|a14 TRUE FALSE 7 a11|a16 FALSE TRUE
内容的提问来源于stack exchange,提问作者Maciej B.
相关产品推荐
相关产品推荐

