如何仅在字符串的一部分上使用 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
请注意,grepl
在 x
上被矢量化,因此我们可以简单地做:
grepl('^((?!stop).)*criterion1', c(Vector, Vector2), perl = TRUE)
[1] TRUE FALSE
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
请注意,grepl
在 x
上被矢量化,因此我们可以简单地做:
grepl('^((?!stop).)*criterion1', c(Vector, Vector2), perl = TRUE)
[1] TRUE FALSE