在匹配其他字符串时否定字符串

时间:2017-07-26 15:53:39

标签: r regex string

我想使用正则表达式匹配一些字符串而在R中否定其他字符串。在下面的示例中,我想要排除我想要匹配的字符串子部分。以下示例使用Regular expression to match a line that doesn't contain a word?的答案。

我的困惑是,当我尝试这个时,grepl会抛出一个错误:

grepl中的错误(mypattern,mystring):   无效的正则表达式'boardgames |(^((?! games)。)* $)',原因'无效的正则表达式'

mypattern <- "boardgames|(^((?!games).)*$)"
mystring <- c("boardgames", "boardgames", "games")

grepl(mypattern, mystring)

注意使用str_detect运行会返回所需的结果(即T,T,F),但我想使用grepl。

1 个答案:

答案 0 :(得分:2)

我们需要perl = TRUE作为默认选项perl = FALSE

grepl(mypattern, mystring, perl = TRUE)
#[1]  TRUE  TRUE FALSE

使用Perl-compatible regexps时需要这样做

根据?regexp

  

grep,regexpr,gregexpr,sub,gsub的perl = TRUE参数   strsplit切换到实现常规的PCRE库   表达式模式匹配使用相同的语法和语义   Perl 5.x,只有一些差异。