新手在这里,找不到我的问题的答案。我的字符串变量中有字符串观察值,并尝试检测MS OR MA OR Master但不包括MBA:
input <- c("Master of Business Administration (MBA) program", "MS, MA, Master", "Master")
期望的输出为str_detect
:
False, True, True
编辑:这现在对我有用:
str_detect(input, "\\bMS\\b|\\bMaster\\b|\\bMA\\b") & !str_detect(input,"\\bMBA\\b")
答案 0 :(得分:2)
您可以使用单个PCRE模式(您需要将grepl
与perl=TRUE
一起使用)
> grepl('^(?!.*\\bMBA\\b).*\\b(?:Master|MA)\\b', input, perl=TRUE)
[1] FALSE TRUE TRUE
请参见regex demo。请注意,您可以对str_detect
使用相同的模式:
> str_detect(input, '^(?!.*\\bMBA\\b).*\\b(?:Master|MA)\\b')
[1] FALSE TRUE TRUE
详细信息
^
-字符串的开头(?!.*\\bMBA\\b)
-否定的超前查询,如果从字符串开头的除换行符以外的任何0+字符之后有完整的单词MBA
,则匹配失败(添加(?s)
在模式开始以启用多行输入).*
-除换行符以外的任意0+个字符,并且尽可能多\\b(?:Master|MA)\\b
-整个单词Master
或MA
。答案 1 :(得分:1)
您可以结合逻辑条件:
library(stringr)
input <- c("Master of Business Administration (MBA) program", "MS, MA, Master", "Master")
(str_detect(input, "Master") & !str_detect(input, "MBA"))
# [1] FALSE TRUE TRUE