R中使用stringr包str_subset提取同时含text-1和text-2的字符串
解决方案
使用正向前瞻断言实现不限顺序的多关键词匹配,同时配合单词边界\b避免误匹配text-11、text-21这类包含更长数字后缀的内容,代码如下:
library(stringr) texts <- c('I-have-text-2-and-text-8','I-have-text-1-and-text-2','I-have-text-7-and-text-8','I-have-text-2-and-text-1','I-have-text-4-and-text-5','I-have-text-11-and-text-12','I-have-text-13-and-text-32','I-have-text-8-and-text-6') str_subset(texts, '^(?=.*\\btext-1\\b)(?=.*\\btext-2\\b)')
正则规则说明
^锚定字符串开头,确保两个断言作用于完整字符串(?=.*\\btext-1\\b)是正向前瞻断言,要求字符串中任意位置存在完整的text-1关键词:.*匹配任意数量的任意字符,代表关键词可以出现在任意位置\\b是单词边界,避免text-1匹配到text-11这类内容
(?=.*\\btext-2\\b)逻辑同上,要求字符串存在完整的text-2关键词- 两个断言无先后顺序要求,因此天然满足两个关键词出现顺序不限的筛选条件
运行后输出结果完全符合预期:
[1] "I-have-text-1-and-text-2" "I-have-text-2-and-text-1"
内容的提问来源于stack exchange,提问作者Laura
相关产品推荐
相关产品推荐

