R中的正则表达式:字符串末尾字母后的数字范围

regex in R: Number range after letter at end of string

我的列名是这样的:

colnames <- c("a81", "b82", "a181", "b182")

我只想提取末尾有 81 或 82 的列,并且在这些数字(81 和 82)之前应该有一个字母。我想在 grepl 中使用正则表达式,这里的预期输出是

TRUE TRUE FALSE FALSE

到目前为止我尝试的是

grepl("[:alpha:][81-82]$", colnames)

不幸的是,所有条目的代码 returns FALSE。我做错了什么?

需要将[:alpha:]改成[[:alpha:]]而不是[81-82],可以是8后跟[=​​16=]

grepl("^[[:alpha:]]8[1-2]$", colnames)
#[1]  TRUE  TRUE FALSE FALSE

或者我们可以指定

grepl("^[A-Za-z]8[1-2]$", colnames)

我会选择

grepl("[a-z](81|82)$", colnames)

[a-z] 表示任何字母,括号将接下来的 2 个字符中的任何一个分组:即 81 或 (|) 82。