R中的正则表达式否定

Regular expression negation in R

我在尝试找到一种在 R 正则表达式中实现否定的方法时遇到了问题。

my_strings <- c("a non-rheumatic fever", "a nonrheumatic fever", "a rheumatic fever", "a not rheumatic fever")
my_strings
## [1] "a non-rheumatic fever" "a nonrheumatic fever" "a rheumatic fever" "a not rheumatic fever"

在上面的字符串中,我试图找到一个将输出以下内容的正则表达式:

## [1] "a rheumatic fever"

我尝试了以下方法,但我不知道如何否定 "rheumatic" 之前 "no(n|t)(\s+|-)?" 的存在:

t_inc <- "\b([^n][^o][^nt](\s+|-)?(rheumatic))\b"
grep(t_inc, my_strings, ignore.case = T, perl = T, value = T)
## character(0)

t_inc <- "\b([^(no(n|t))](\s+|-)?(rheumatic))\b"
grep(t_inc, my_strings, ignore.case = T, perl = T, value = T)
## character(0)

有人能给我一些指点吗?

也许我们可以通过使用@IceCreamToucan 在评论

中提到的invert 将语法修改为更简单的语法
grep("no[nt][- ]?rheumatic", my_strings, invert = TRUE, value = TRUE)
#[1] "a rheumatic fever"

模式匹配 'no',后跟字母 'n' 或 t',后跟 - 或 space(如果存在)和单词 'rheumatic'。使用 invert= TRUE,它将 return 所有与模式不匹配的匹配项