使用PCRE在R中的正则表达式中进行了多个匹配和多个匹配



我对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

相关内容

  • 没有找到相关文章

最新更新