R中的正则表达式求反

问题描述 投票:0回答:1

我在尝试找到一种在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"

我尝试了以下操作,但我想不出如何否定紧接在"no(n|t)(\\s+|-)?"之前的"rheumatic"的存在:

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)

请有人给我一些指示吗?

r regex grep pattern-matching regex-negation
1个回答
0
投票

[也许我们可以通过注释@CceCreamToucan在注释中提到的invert来将语法修改为更简单的语法

grep("no[nt][- ]?rheumatic", my_strings, invert = TRUE, value = TRUE)
#[1] "a rheumatic fever"
© www.soinside.com 2019 - 2024. All rights reserved.