我对R中的正则表达式非常新,我正在尝试匹配字符串向量,包括一些模式并排除某些模式。我在Stackoverflow上进行了搜索,似乎没有提出类似的问题。这是要匹配的字符串mystring
的向量。
mystring <- c("fhwjantdesd", "unwanted", "fdedsifrfed", "undesired", "sdsyessd", "yedsfd")
在此mystring
中,我想弄清楚mystring
是否包含6个"通缉"字母的任何排列,不包括字符串"通缉"。同样,包括"所需"的7个字母的任何置换和3个字母的"是"字母,不包括字符串"所需"one_answers"是"。
因此grepl(pattern, mystring, perl = TRUE)
的预期输出应为:
[1] TRUE, FALSE, TRUE, FALSE, FALSE, TRUE
我想使用GREPL的perl
选项,该选项可以加快功能。有人可以在此pattern
上提供一些线索吗?并且您能解释一下模式的每个部分意味着我只是使用PCRE的开始者。谢谢
下面的代码将有一定限制。
grepl("(^((?!yes|wanted|desired).)*$)", mystring, perl=TRUE)
它只会排除在单词之上。那是根据您的数据。
您可以尝试这样的尝试
mystring <- c("fhwjantdesd", "unwanted", "fdedsifrfed", "undesired", "sdsyessd", "yedsfd")
Status <- NULL
str <- c("wanted", "desired", "yes")
index <- 1
for (i in mystring) {
for (j in str) {
char_length <- nchar(j)
if (is.na(str_extract(string = i, pattern = j)) | str_extract(string = i, pattern = j) == F) {
if (sum(unlist(strsplit(j, "")) %in% unlist(strsplit(i, ""))) >= char_length) {
Status[index] <- T
break
}
}
}
if (is.na(Status[index])) {
Status[index] = F
}
index <- index + 1
}
Status
> Status
[1] TRUE FALSE TRUE FALSE FALSE TRUE