如何仅在字符串的一部分上使用 grepl

How to use grepl on only part of a string

Vector<-c("Consider criterion1, criterion2, criterion3, stop considering criterion1,criterion2, criterion3")
Vector2<-c("Consider criterion2, criterion3, stop considering criterion1,criterion2, criterion3")

grepl("criterion1",Vector)
[1] TRUE

对于第二个条件,我想要 FALSE 因为我想忽略单词 stop

之后的所有字符
grepl("criterion1",Vector2)
[1] FALSE

解决这个问题的几种方法:

您可以使用 sub 删除 stop 之后的所有内容,以确保您只在停止

之前检查
grepl('criterion1', sub('stop.*', '', Vector))
[1]  TRUE 

grepl('criterion1', sub('stop.*', '', Vector2))
[1] FALSE

或者您可以完全更改模式以确保在检查值之前没有 stop

grepl('^((?!stop).)*criterion1', Vector, perl = TRUE)
[1] TRUE

grepl('^((?!stop).)*criterion1', Vector2, perl = TRUE)
[1] FALSE

请注意,greplx 上被矢量化,因此我们可以简单地做:

grepl('^((?!stop).)*criterion1', c(Vector, Vector2), perl = TRUE)
[1]  TRUE FALSE