Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 如何在正则表达式中使用逻辑运算符包含多个负的前向和后向条件_R - Fatal编程技术网

R 如何在正则表达式中使用逻辑运算符包含多个负的前向和后向条件

R 如何在正则表达式中使用逻辑运算符包含多个负的前向和后向条件,r,R,我需要将所有出现“dog”的字符串转换为“cat”,除非字符串是“browndog jumps up”或“dog barks looking”,在这种情况下,它们应该保持不变 我试着用消极的前看和后看 这是我的例子 str = c("brown dog", "brown dog jumps up", "dog jumps up", "dog barks loudly", "dog ran out") 预期结果是: CAT, brown dog jumps up, CAT, dog barks

我需要将所有出现“dog”的字符串转换为“cat”,除非字符串是“browndog jumps up”或“dog barks looking”,在这种情况下,它们应该保持不变

我试着用消极的前看和后看

这是我的例子

str = c("brown dog", "brown dog jumps up", "dog jumps up", "dog barks loudly", "dog ran out")
预期结果是:

CAT, brown dog jumps up, CAT, dog barks loudly, CAT
我在第一个条件下尝试了这个方法,但它似乎在非此即彼的基础上起作用,即前面没有“brown”或后面没有“jumps up”。正则表达式是否按照三个条件(brown/dog/jumps up)的顺序起作用

gsub('.*?

gsub('.*(为什么不检查
“dog”
是否出现,以及
字符串是否出现,并将其更改为
“CAT”


我们可以在单个
grep
中使用
invert=TRUE

str[grep("(brown dog jumps up)|(dog barks loudly)", str, invert = TRUE)] <- "CAT"
str
#[1] "CAT"  "brown dog jumps up" "CAT"  "dog barks loudly"   "CAT" 

str[grep((棕色的狗跳起来)|(狗大声叫)”,str,invert=TRUE)]谢谢@akrun,但这会将所有不带“dog”的字符串也改为“CAT”。我需要它们保持不变。
gsub('.*(?<!brown )dog.*|.*dog(?! jumps up).*', "CAT", str, perl = TRUE)
gsub('.*(?<!brown )dog.*|.*dog(?! jumps up).*|.*dog(?! barks loudly).*', "CAT", str, perl = TRUE)
strings <- c('dog barks loudly', 'brown dog jumps up')
str[grepl('dog', str) & (!str %in% strings)] <- "CAT"

str
#[1] "CAT"  "brown dog jumps up" "CAT"  "dog barks loudly"   "CAT" 
strings <- paste0(c('dog barks loudly', 'brown dog jumps up'), collapse = "|")
str[grepl('dog', str) & !grepl(strings, str)] <- "CAT"
str[grep("(brown dog jumps up)|(dog barks loudly)", str, invert = TRUE)] <- "CAT"
str
#[1] "CAT"  "brown dog jumps up" "CAT"  "dog barks loudly"   "CAT"