我想使用正则表达式匹配一些字符串而在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。
答案 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,只有一些差异。