常规表达式除外

问题描述 投票:0回答:1

我想知道向量中是否有模式,可以说:

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和数字的数字? (在我的真实数据中是较大文本的一部分)

r regex grepl
1个回答
1
投票

我们可以在此处指定开始(^)和结束($),以匹配以'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)代替^

© www.soinside.com 2019 - 2024. All rights reserved.