如何使用正则表达式提取字符串的最后一位数字?

Dre*_*ew 13 regex replace r names

我有一堆colnames

L_1_3
L_2_23
L_3_91
L_3_16
Run Code Online (Sandbox Code Playgroud)

我想使用 _ 后面的最后一位数字用新名称替换这些列名,如下所示:

3
23
91
16
Run Code Online (Sandbox Code Playgroud)

我试过colnames(X) <- gsub("L_\\d\\d_", "", colnames(X))这适用于末尾有两位数的字符串。我想要一个既适用于一位数又适用于两位数的人。

谢谢!

Ian*_*ell 12

这是一个正向预测的选项:

gsub(".+_(?=\\d+$)", "", X, perl = TRUE)
[1] "3"  "23" "91" "16"
Run Code Online (Sandbox Code Playgroud)


The*_*ird 5

如果这是适用于您的 2 位数模式,那么您唯一需要做的就是使用 ?

L_\\d\\d?_
Run Code Online (Sandbox Code Playgroud)

正则表达式演示| R 演示


如果必须匹配整个模式,则可以使用捕获组并使用锚点来断言字符串的开头^和结尾$,并在替换中使用该组。

^L_\\d\\d?_(\\d+)$
Run Code Online (Sandbox Code Playgroud)

在零件中

^ 字符串开始
L_ 匹配 L_
\d 匹配一个数字
\d? 匹配一个数字并重复 0 或 1 次
_ 比赛 _
( 捕获组 1
  \d+ 匹配一个数字并重复 1 次或多次
) 关闭群组
$ 字符串结尾

正则表达式演示| R 演示

X <- c("L_1_3", "L_2_23", "L_3_91", "L_3_16")
gsub("^L_\\d\\d?_(\\d+)$", "\\1", X)
Run Code Online (Sandbox Code Playgroud)

输出

[1] "3"  "23" "91" "16"
Run Code Online (Sandbox Code Playgroud)