我有几个文件。他们的名字示例如下: -
ABC2_5XYZ_7_data.csv
DEF2_10QST_7_data.csv
每当我读取文件名时,我想捕获_
旁边的数字并将它们存储到另一个变量中。
在上面的例子中,这些是“5”和“10”。
有人可以提出建议吗?
答案 0 :(得分:4)
我认为这会奏效。为了确保,我添加了几个字符串。由于我们正在寻找第一个也是唯一一个匹配项,因此我们可以使用sub()
。
x <- c("ABC2_5XYZ_data.csv", "DEF2_10QST_data.csv", "A123_456ABC_data.csv", "X9F4_7912D_data.csv")
sub(".*_(\\d+).*", "\\1", x)
# [1] "5" "10" "456" "7912"
正则表达式.*_(\\d+).*
捕获紧跟在下划线之后的数字。 \\1
会将捕获的数字返回给我们。
.*
匹配任何字符(换行符除外)_
字面匹配字符_
(
启动捕获组\\d+
匹配数字一次或多次)
结束捕获组.*
匹配任何字符(换行符除外)可以在regex101
找到进一步的解释 OP更改问题后更新:为了回复您的评论和更改的问题,您可以使用以下内容。请注意,我们仍在使用sub()
(不是gsub()
!),因为我们需要第一次匹配。
x <- c("ABC2_5XYZ_7_data.csv", "DEF2_10QST_7_data.csv")
sub("[[:alnum:]]+_(\\d+).*", "\\1", x)
# [1] "5" "10"