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 所有与模式不匹配的匹配项
我在尝试找到一种在 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 所有与模式不匹配的匹配项