首页 > 解决方案 > 检测包含和排除特定单词的字符串(使用 stringr 包)

问题描述

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

标签: rregexstring

解决方案


您可以使用单个 PCRE 模式(您需要使用greplwith perl=TRUE):

> grepl('^(?!.*\\bMBA\\b).*\\b(?:Master|MA)\\b', input, perl=TRUE)
[1] FALSE  TRUE  TRUE

请参阅正则表达式演示。请注意,您可以使用相同的模式str_detect

> str_detect(input, '^(?!.*\\bMBA\\b).*\\b(?:Master|MA)\\b')
[1] FALSE  TRUE  TRUE

细节

  • ^- 字符串的开始
  • (?!.*\\bMBA\\b)MBA- 如果在字符串开头的换行符以外的任何 0+ 字符之后有一个完整的单词,则匹配失败的负前瞻((?s)在模式开始时添加以启用多行输入)
  • .*- 除换行符以外的任何 0+ 个字符,尽可能多
  • \\b(?:Master|MA)\\b- 一个完整的词MasterMA

推荐阅读