R语言如何用grep匹配'dem'子串同时排除'democrat'字符串?
正则构造方案
这个需求完全可以通过grep实现,有两种常用的实现思路:
方案1:单正则匹配(利用负向预查)
直接通过一条正则表达式实现匹配逻辑,R中使用时需要开启PCRE正则支持,即设置perl = TRUE参数:
my_text <- c("demRace", "democrat", "demGender") # 正则含义:匹配包含dem、且不包含democrat子串的字符串 grepl(pattern = "^(?!.*democrat).*dem.*$", x = my_text, perl = TRUE)
运行后输出就是你需要的TRUE FALSE TRUE。
如果你要排除的只有**完全等于"democrat"**的字符串,也可以用更精准的正则:
grepl(pattern = "^dem(?!ocrat$)", x = my_text, perl = TRUE)
方案2:逻辑组合(更易读,性能更高)
不需要写复杂正则,直接把两个匹配条件做逻辑组合即可:
grepl("dem", my_text) & !grepl("democrat", my_text) # 如果仅需排除完全等于democrat的字符串,写法更简单 grepl("dem", my_text) & my_text != "democrat"
内容的提问来源于stack exchange,提问作者James Martherus
相关产品推荐
相关产品推荐

