使用正则表达式删除最后一个字符后的前导数字

Move leading numbers after last character using regular expreession

我想将所有前导数字放在字符串中两个下划线之间的最后一个字符之后:

我有这个向量:

have <- c("6ABCD23102019", "3ABCD23102019", "9ABCD23102019", "10ABCD23102019")

[1] "6ABCD23102019" "3ABCD23102019" "9ABCD23102019" "10ABCD23102019"

我想得到这个:

desired <- c("ABCD_6_23102019", "ABCD_3_23102019", "ABCD_9_23102019", "ABCD_10_23102019")

[1] "ABCD_6_23102019" "ABCD_3_23102019" "ABCD_9_23102019" "ABCD_10_23102019"

这个6ABCD23102019应该变成这个ABCD_6_23102019

背景:在文件重命名和复制操作中,我需要重命名文件。

我试过了:

library(stringr)
x <- str_sub(have, 1,1)
helper <- str_replace(have, '\dA', 'A')
result <- str_replace(helper, 'D', 'D_x_')
result

[1] "ABCD_x_23102019" "ABCD_x_23102019" "ABCD_x_23102019" "ABCD_x_23102019"

使用捕获组捕获开头的一个或多个数字(^)后跟大写字母,然后重新排列反向引用(\1\2)逆序

library(stringr)
str_replace(have, "^(\d+)([A-Z]+)", "\2_\1_")

-输出

[1] "ABCD_6_23102019"  "ABCD_3_23102019"  "ABCD_9_23102019"  "ABCD_10_23102019"