有例外的正则表达式
Regular expresion with exceptions
我想知道向量中是否存在模式,比方说:
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" 且后跟数字的那些。在它们之间可以是数字、连字符或 space,然后是数字。我想排除那些属于较大代码的代码,即带有 P 和另一个数字的代码,例如:"MC 20-P1" "MC 21P1"。
这会检测到 MC 和编号:
vector[grepl("MC( |-)*[0-9]{1,}", vector)]
我尝试使用 ^
进行排除,但我的尝试失败了:
vector[grepl("MC( |-)*[0-9]{1,}[^(-*)P]", vector)]
如何只匹配MC和数字? (在我的真实数据中是较大文本的一部分)
我们可以在这里指定开始(^
)和结束($
)来匹配以'MC'开始后跟space或[=13的字符串=] 然后一个或多个数字 (\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
) 代替 ^
我想知道向量中是否存在模式,比方说:
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" 且后跟数字的那些。在它们之间可以是数字、连字符或 space,然后是数字。我想排除那些属于较大代码的代码,即带有 P 和另一个数字的代码,例如:"MC 20-P1" "MC 21P1"。 这会检测到 MC 和编号:
vector[grepl("MC( |-)*[0-9]{1,}", vector)]
我尝试使用 ^
进行排除,但我的尝试失败了:
vector[grepl("MC( |-)*[0-9]{1,}[^(-*)P]", vector)]
如何只匹配MC和数字? (在我的真实数据中是较大文本的一部分)
我们可以在这里指定开始(^
)和结束($
)来匹配以'MC'开始后跟space或[=13的字符串=] 然后一个或多个数字 (\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
) 代替 ^