子字符串从右起第一个字符
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"
我希望能够从向量的每个元素的右侧对第一个字符进行子串化
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"