检测同时包含和排除某些单词的字符串(使用stringr程序包)

时间:2018-07-30 09:51:34

标签: r regex string

新手在这里,找不到我的问题的答案。我的字符串变量中有字符串观察值,并尝试检测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")

2 个答案:

答案 0 :(得分:2)

您可以使用单个PCRE模式(您需要将greplperl=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-整个单词MasterMA

答案 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