我对R中的正则表达式很新,我试图匹配包含一些模式和排除某些模式的字符串向量。我在stackoverflow上搜索,似乎没有问过类似的问题。这是要匹配的字符串mystring
的向量。
mystring <- c("fhwjantdesd", "unwanted", "fdedsifrfed", "undesired", "sdsyessd", "yedsfd")
在此mystring
中,我想弄清楚mystring
是否包含6个&#34;想要&#34;的字母的任何排列。排除字符串&#34;想要&#34;。同样,包括&#34;期望&#34;的7个字母的任何排列。和#34;是&#34;排除字符串&#34;期望&#34;和&#34;是&#34;。
因此grepl(pattern, mystring, perl = TRUE)
的预期输出应为:
[1] TRUE, FALSE, TRUE, FALSE, FALSE, TRUE
我想使用grepl的perl
选项,这可以加快功能。有没有人能提供一些关于pattern
的线索?你能解释一下这个模式的每个部分是什么意思我只是使用PCRE的首发。感谢
答案 0 :(得分:1)
下面的代码会有一些限制。
grepl("(^((?!yes|wanted|desired).)*$)", mystring, perl=TRUE)
它只会排除上述字词。那是根据你的数据。
答案 1 :(得分:0)
您可以尝试这样
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