子字符串从右起第一个字符

Substring first character from right

我希望能够从向量的每个元素的右侧对第一个字符进行子串化

ABC20
BCD3
B1
AB2222
BX4444

所以对于上面的组,我想要 C、D、B、B、X .... 有简单的方法吗?我知道有一个 substr 和一个 numindex/charindex。所以我想我可以使用这些但不确定在 R 中是否准确。

我们可以使用sub来捕获最后一个大写字母(([A-Z]))后跟零个或多个数字(\d*)直到最后($)字符串并将其替换为捕获组

的反向引用(\1
sub(".*([A-Z])\d*$", "\1", x)
#[1] "C" "D" "B" "B" "X"

数据

x <- c("ABC20", "BCD3", "B1", "AB2222", "BX4444")

您可以使用库 stringi,

stringi::stri_extract_last_regex(x, '[A-Z]')
#[1] "C" "D" "B" "B" "X"

数据

x <- c('ABC20', 'BCD3', 'B1', 'AB2222', 'BX4444')

试试这个:

您的数据:

  list<-c("ABC20","BCD3","B1","AB2222","BX4444")

确定位置

  number_pos<-gregexpr(pattern ="[0-9]",list)
  number_first<-unlist(lapply(number_pos, `[[`, 1))

提取

  substr(list,number_first-1,number_first-1)
[1] "C" "D" "B" "B" "X"