我想知道向量中是否有模式,可以说:
vector <- c(paste0(paste("MC", 1:25), c(rep("", 10), rep("-P1",10), rep("P1",5))), rep("RANDOM", 10),c("MC1","MC2","MC-3"), rep("MCRANDOM", 10))
vector
我想要带“ MC”的字母,后跟数字。这些之间可以是数字,或者是连字符或空格,然后是数字。我想排除那些属于较大代码的代码,即带有P和另一个数字的代码,例如:“ MC 20-P1”和“ MC 21P1”。这将检测到具有MC和编号的代码:
vector[grepl("MC( |-)*[0-9]{1,}", vector)]
我尝试使用^
作为排他性,但尝试失败:
vector[grepl("MC( |-)*[0-9]{1,}[^(-*)P]", vector)]
我如何只匹配带有MC和数字的数字? (在我的真实数据中是较大文本的一部分)
我们可以在此处指定开始(^
)和结束($
),以匹配以'MC'开头,后跟空格或-
,然后是一个或多个数字(\\d+
)的字符串,直到结束
grep("^MC[- ]?\\d+$", vector, value = TRUE)
#[1] "MC 1" "MC 2" "MC 3" "MC 4" "MC 5" "MC 6"
#[7] "MC 7" "MC 8" "MC 9" "MC 10" "MC1" "MC2" "MC-3"
如果MC
可以是子字符串,则使用单词边界(\\b
)代替^